Cuando desarrollamos una aplicación web a veces no tenemos en cuenta esos pequeños detalles como son el consumo de recursos que puede acarrear que la misma este haciendo consultas constantes a nuestra base de datos.
Si la aplicación crece de forma bestial esto puede hacer que nuestra página este constantemente con problemas o que los datos no se inserten correctamente. Pero como siempre para todo, hay soluciones.
Hoy os voy hacer uso de Memcached y como cachear nuestras consultas de la base de datos a través de PHP.
Instalando Memcached en CentOS
Este paso os lo voy a omitir y os mando directamente al post en la web de mi amigo Julio Rodríguez: Instalando memcached y php-memcache en CentOS con Cpanel
Cualquier duda que tengáis con la instalación podéis dejarle un comentario a el o directamente a mi.
Inicializando Memcached en PHP
Si vamos a estar usandolo continuamente lo mejor es que lo introduzcamos en el archivo que usamos para la configuración (en el caso de que usemos un archivo tipo configuracion.php) o al principio de nuestro archivo index.php. Escribiremos lo siguiente:
$m = new Memcache(); $m->addServer('localhost', 11211);
La forma de instanciar a memcached puede variar según la versión pudiendo ser también new Memcached y el servidor y el puerto puede varia en función de la configuración que hayáis realizado.
Cacheando una consulta con Memcached
Una vez inicializado vamos a proceder a cachear por ejemplo los datos de acceso de un usuario de nuestra BBDD.
$userdata = $m->get('user_1'); if ($userdata == false) { $userdata = $db->query("SELECT * FROM users WHERE id_user=1 limit 1")->fetch_assoc(); $m->set('user_1', $userdata, time() + 7200); }
Como véis en este caso estamos cacheando los datos del usuario número uno de nuestra aplicación. Si interactuamos con un sistema de cookies o sesiones podríamos tomar el id de usuario e ir cacheando los datos de cada uno de ellos e incluso hacer que la conexión a la base de datos solo se abriera cuando los resultados no han sido cacheados haciendo que el consumo de recursos fuera menor.
Si queremos vaciar el registro que hemos cacheado anteriomente usaremos:
$m->delete('user_1');
En este caso hemos cacheado una consulta a una base de datos MySQL pero podría hacerse con cualquier motor de BBDD o con datos estáticos. Espero que os haya servido de ayuda 🙂
Hola.. yo quisiera cachear mi sitio en algunas funciones pero no tengo idea de como hacerlo… cómo podría contactarte?
¿Que quieres cachear exactamente y que tecnologías utiliza tu sitio?