Juan Santamaría

Juan Santamaría

Programador web

Cacheando consultas a la base de datos con Memcached

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 🙂

COMPARTE TU OPINIÓN

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies

ACEPTAR
Aviso de cookies