• Saltar a la navegación principal
  • Saltar al contenido principal
  • Saltar a la barra lateral principal

Bitacora Linux Logo

  • Acceder
  • Curso
  • Contactar
  • Apache
  • Consola y Servidores
  • Programacion
    • PHP
    • Javascript y HTML5
  • Otros

Cacheando en Apache2

Memcached es un demonio que puede almacenar objetos en la memoria del sistema. Con esto conseguimos que, si esa consulta que íbamos a lanzar a la BD ha sido pedida recientemente, la recogemos directamente desde la memoria RAM del cache, y la devolvemos directamente. En caso de que no estuviera, la pedimos a la BD y la almacenamos en el cache, usando como “key” del hash la consulta a la base de datos serializada. De esta forma el rendimiento aumenta muchísimo al disminuir notablemente la interacción con la base de datos, con todo lo que eso implica (interfaz con la BD, consultas SQL, acceso a disco, recuperar la información, etc.)

#apt-get install memcached php5-memcache

Para lanzar el memcached:

#memcached -d -m 1024 -l 127.0.0.1 -p 11211 -u www-data

Especificamos que para la cache damos 1024 megas, que solo actuara para localhost y por el puerto el 11211 y lo lanzamos como user www-data.

Reiniciamos Apache

Para parar el memcached, desde /etc/init.d/memcached stop

Con esta configuracion el programa nos crea un fichero de configuracion que esta en /etc/memcached.conf en el que podremos cambiar las opciones.

Al hacer un

#netstat -ntlpu

Obtendremos la siguiente linea:

tcp 0 0 127.0.0.1:11211 0.0.0.0:* ESCUCHAR 651/memcached

Lo cual nos dice que ya esta funcionando el memcached.

El cacheo lo podemos usar de la siguiente manera. Tenemos una función que realiza una consulta a la BD:

function get_foo (int userid) {
result = db_select("SELECT * FROM users WHERE userid = ?", userid);
return result;
}

Usando memcached quedaria asi la consulta:

function get_foo (int userid) {

result = memcached_fetch("userrow:" + userid);

if (!result) {

result = db_select("SELECT * FROM users WHERE userid = ?", userid);

memcached_add("userrow:" + userid, result);

}

return result;

}

En este caso, primero consultamos al cache, si el cache tiene almacenada esa clave la devuelve directamente. En caso contrario, preguntamos a la base de datos y lo almacenamos en el cache para que las siguientes consultas sean desde RAM.

Así mismo, las actualizaciones en BD hay que modificarlas porque si no el cache empezaría a devolver información incorrecta, la forma más fácil de hacer esto es directamente desde la aplicación, en el momento en el que se produzca una actualización, directamente eliminamos esa “key” y la substituimos por la nueva de la siguiente forma:

function update_foo(int userid, string dbUpdateString) {
result = db_execute(dbUpdateString);
if (result) {
data = createUserDataFromDBString(dbUpdateString);
memcached_set("userrow:" + userid, data);
}
}

Comparte esta entrada:

Compartir en X (Twitter) Compartir en Facebook Compartir en Email Compartir en WhatsApp Compartir en Telegram

Interacciones con los lectores

Deja una respuesta

Lo siento, debes estar conectado para publicar un comentario.

sidebar

sidebar-alt

Diseño y Desarrollo por juanjomc.com

Utilizamos cookies propias y de terceros para garantizar el funcionamiento de la web, medir su uso y mejorar nuestros servicios. Puede aceptar todas las cookies, rechazar las no necesarias o configurar sus preferencias. Política de cookies

Configurar cookies

Necesarias para que la web funcione correctamente. No se pueden desactivar desde este panel.

Ayudan a medir el uso del sitio y mejorar sus contenidos.

Permiten publicidad, medición de campañas o personalización de anuncios.

Guardan preferencias o permiten contenido externo no necesario.