web-dev-qa-db-fra.com

Utiliser redis comme cache pour une base de données mysql

J'ai besoin de créer une solution en utilisant php, avec une base de données mysql avec beaucoup de données. Mon programme aura de nombreuses réquisitions, je pense que si je travaille avec du cache et une base de données OO, j'aurai un bon résultat, mais je n'ai pas d'expérience.

Je pense par exemple que si je cache les informations enregistrées dans mysql dans une base de données redis, les performances seront améliorées, mais je ne sais pas si c'est une bonne idée, donc j'aimerais que quelqu'un m'aide à choisir.

Désolé si mon anglais n'est pas très bon, je suis du Brésil.

26

Oui, redis est bon pour ça. Mais pour obtenir l'essentiel, il existe essentiellement deux approches de mise en cache. Selon que vous utilisez un framework (et lequel) ou non, vous pouvez avoir la première option disponible en standard ou avec l'utilisation d'un plug-in:

  1. Cache les requêtes de base de données, c'est-à-dire que les requêtes sélectionnées et leurs résultats seront conservés dans redis pour un accès plus rapide pendant un temps donné ou jusqu'à ce que le cache soit vidé (utile après la mise à jour de la base de données). Dans ce cas, vous pouvez utiliser la mise en cache de requête mysql intégrée, ce sera plus simple que d'utiliser un magasin de valeurs-clés supplémentaire, ou vous pouvez remplacer l'intégration de base de données par défaut avec votre propre classe en utilisant le cache (par exemple http://pythonhosted.org/johnny-cache/ ).
  2. Mise en cache personnalisée, c'est-à-dire créer vos propres structures à conserver dans le cache et les recharger périodiquement ou manuellement avec des données extraites de la base de données. Il est plus flexible et potentiellement plus puissant, car vous pouvez utiliser des fonctionnalités de redis intégrées telles que des listes ou des ensembles triés, ce qui réduit considérablement la surcharge de mise à jour. Il nécessite un peu plus de codage, mais il offre généralement de meilleurs résultats, car il est plus personnalisé. Un bon exemple est de conserver les meilleurs articles sous forme de liste d'ID redis, puis d'accéder également aux articles sérialisés avec l'ID donné à partir de redis. Vous pouvez garder cet article non normalisé - c'est-à-dire. L'objet sérialisé peut contenir l'ID utilisateur ainsi que le nom d'utilisateur, afin que vous puissiez réduire au minimum les frais généraux des requêtes supplémentaires.

C'est à vous de décider quelle approche adopter. Personnellement, je choisis presque toujours l'approche numéro deux. Mais, bien sûr, tout dépend du temps dont vous disposez et de ce que l'application est censée faire - vous pourriez aussi bien commencer par la mise en cache des requêtes mysql et si les résultats ne sont pas assez bons, passez à redis et à la mise en cache personnalisée.

47