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);
}
}
Deja un Comentario
Debes de estar logueado para comentar.