Redis
 sql >> Base de données >  >> NoSQL >> Redis

Utilisation de Redis pour mettre en cache le résultat SQL

Voici une chose surprenante en ce qui concerne PHP et MySQL (je ne suis pas sûr des autres langages) - non mettre en cache des éléments dans memcached ou Redis est en fait plus rapide. Plus vite. Fondamentalement, si vous venez de créer votre application et d'interroger MySQL, vous en tirerez plus.

Passons maintenant à la partie "pourquoi".

InnoDB , le moteur par défaut, est un superbe moteur. Plus précisément, sa gestion de la mémoire (allocation et autres) est supérieure à toutes les solutions de stockage de mémoire. C'est un fait, vous pouvez le rechercher ou me croire sur parole :il fonctionnera au moins aussi bien que Redis.

Maintenant, que se passe-t-il dans votre application ? Vous interrogez MySQL et mettez en cache le résultat dans redis. Cependant, MySQL est également suffisamment intelligent pour conserver les résultats en cache. Ce que vous venez de faire est de créer un descripteur de fichier supplémentaire requis pour se connecter à Redis. Vous avez également utilisé du stockage (RAM) pour mettre en cache le résultat déjà mis en cache par MySQL.

Voici une autre partie intéressante - la manière préférée de servir les scripts PHP est d'utiliser php-fpm - c'est beaucoup plus rapide que n'importe quel mod_* merde là-bas. Jusqu'au cœur, php-fpm est un processus superviseur qui engendre des processus enfants. Ils ne s'arrêtent pas une fois le script servi, ce qui signifie qu'ils mettent en cache les connexions à MySQL - se connectent une fois, utilisent plusieurs fois. Fondamentalement, si vous servez des scripts en utilisant php-fpm , ils réutiliseront la connexion déjà établie à MySQL, ce qui signifie que vous n'ouvrirez et ne fermerez pas les connexions pour chaque requête - ceci est extrêmement convivial et vous permet d'avoir une connexion ultra-rapide à MySQL. MySQL, économe en mémoire et ayant le résultat en cache, est beaucoup plus rapide que Redis.

Maintenant, qu'est-ce que tout cela signifie pour vous - avoir une configuration appropriée vous permet d'avoir un petit code simple, facile, n'impliquant pas Redis et élimine tous les problèmes que vous pourriez avoir avec l'invalidation du cache et ainsi de suite et vous ne gaspillerez pas votre mémoire pour contenir deux fois les mêmes données.

Ingrédients dont vous avez besoin pour que cela fonctionne :

  • php-fpm
  • MySQL et InnoDB tables basées et surtout - suffisamment de RAM et innodb_buffer_pool_size modifié variable. Celui-ci contrôle la quantité de RAM qu'InnoDB est autorisé à allouer à ses fins - plus il est grand, mieux c'est.

Vous avez éliminé Redis du jeu, vous avez gardé votre code simple et facile à entretenir, vous n'avez pas dupliqué les données, vous n'avez pas introduit de système supplémentaire dans le jeu et vous avez laissé le logiciel destiné à gérer les données faire son travail. Compromis assez bon marché pour une utilité maximale, même si vous compilez tout le logiciel à partir de zéro - cela ne prendra pas plus d'une heure environ pour le rendre opérationnel.

Ou, vous pouvez simplement ignorer ce que j'ai écrit et chercher une solution en utilisant Redis.