sql >> Base de Datos >  >> NoSQL >> Redis

Uso de Redis para almacenar en caché el resultado de SQL

Aquí hay algo sorprendente cuando se trata de PHP y MySQL (no estoy seguro acerca de otros lenguajes):no almacenar cosas en caché en Memcached o Redis es en realidad más rápido. Mucho mas rápido. Básicamente, si acaba de crear su aplicación y consultar MySQL, obtendrá más de ella.

Ahora la parte del "por qué".

InnoDB , el motor predeterminado, es un motor excelente. Específicamente, su administración de memoria (asignación y demás) es superior a cualquier solución de almacenamiento de memoria. Eso es un hecho, puede buscarlo o confiar en mi palabra:al menos funcionará tan bien como Redis.

Ahora, lo que sucede en su aplicación:consulta MySQL y almacena en caché el resultado en redis. Sin embargo, MySQL también es lo suficientemente inteligente como para mantener los resultados en caché. Lo que acaba de hacer es crear un descriptor de archivo adicional que se requiere para conectarse a Redis. También usó algo de almacenamiento (RAM) para almacenar en caché el resultado que MySQL ya almacenó en caché.

Aquí viene otra parte interesante:la forma preferida de servir scripts PHP es usando php-fpm - es mucho más rápido que cualquier mod_* mierda por ahí. Hasta el núcleo, php-fpm es un proceso supervisor que genera procesos secundarios. No se apagan después de que se sirve el script, lo que significa que almacenan en caché las conexiones a MySQL:se conectan una vez, se usan varias veces. Básicamente, si sirve scripts usando php-fpm , reutilizarán la conexión ya establecida a MySQL, lo que significa que no abrirá y cerrará conexiones para cada solicitud; esto es extremadamente amigable con los recursos y le permite tener una conexión ultrarrápida a MySQL. MySQL, al ser eficiente en memoria y tener el resultado en caché, es mucho más rápido que Redis.

Ahora, ¿qué significa todo esto para usted? Tener una configuración adecuada le permite tener un código pequeño que es simple, fácil, no involucra Redis y elimina todos los problemas que pueda tener con la invalidación de caché y lo que no, y no desperdiciará su memoria para contener los mismos datos dos veces.

Ingredientes que necesitas para que esto funcione:

  • php-fpm
  • MySQL y InnoDB tablas basadas y, sobre todo, suficiente RAM y innodb_buffer_pool_size modificado variable. Ese controla la cantidad de RAM que InnoDB puede asignar para sus propósitos:cuanto más grande, mejor.

Eliminaste a Redis del juego, mantuviste tu código simple y fácil de mantener, no duplicaste datos, no introdujiste un sistema adicional al juego y dejaste que el software destinado a cuidar los datos hiciera su trabajo. Compensación bastante económica para obtener la máxima utilidad, incluso si compila todo el software desde cero:no le tomará más de una hora ponerlo en funcionamiento.

O simplemente puede ignorar lo que escribí y buscar una solución usando Redis.