Memcached es un sistema de cache que se ejecuta en modo servicio y almacena datos en memoria RAM, posee librerías en los diferentes lenguajes de programación y el almacenamiento lo realiza por medio de asociaciones de series de cadenas hash.
Cuando se debe utilizar Memcached
Memcached se debe utiliza en cualquier aplicación que posea base de datos y realice consultas, ya que nos ayudaria a la velocidad de la aplicación.
Como funciona Memcached
Memcached funciona almacenando cualquier dato que le solicitemos en memoria ram, el mejor ejemplo para mejorar el rendimiendo de una aplicación es el siguiente:
– Tenemos una tabla en nuestra base de datos y en esta vamos a realizar varias operaciones y veremos como se comporta Memcached.
PHP: Agregamos un registro a la tabla
Php+Memcache: En nuestro Memcached se debe actualizar nuestros nuevos valores
PHP: Consultar los registros de la tabla
Php+Memcache: En vez de ir a nuestra base de datos el php se queda consultando la data que tiene en memcached directamente en la memoria ram osea mucho más rapido.
PHP: Actualizamos un registro en la tabla
Php+Memcache: En nuestro Memcached se debe actualizar nuestros nuevos valores
PHP: Consultar nuevamente los registros de la tabla
Php+Memcache: En vez de ir a nuestra base de datos el php se queda consultando la data que tiene en memcached.
PHP: Borramos un registro en la tabla
Php+Memcache: En nuestro Memcached se debe actualizar nuestros nuevos valores
PHP: Consultar nuevamente los registros de la tabla
Php+Memcache: En vez de ir a nuestra base de datos el php se queda consultando la data que tiene en memcached.
Este seria un proceso básico en Memcached ahora vamos a ver como se puede hacer un ejemplo de Memcached con PHP.
Ejemplo Memcached con PHP
Funciones para utilizar en nuestro ejemplo
<?php global $memcache; $memcache = new Memcache; function getCache($key) { global $memcache; return ($memcache) ? $memcache->get($key) : false; } function setCache($key,$object,$timeout = 60) { global $memcache; return ($memcache) ? $memcache->set($key,$object,MEMCACHE_COMPRESSED,$timeout) : false; } function mysql_query_cache($sql,$linkIdentifier = false,$timeout = 60) { if (($cache = getCache(md5("mysql_query" . $sql))) !== false) { $cache = false; $r = ($linkIdentifier !== false) ? mysql_query($sql,$linkIdentifier) : mysql_query($sql); if (is_resource($r) && (($rows = mysql_num_rows($r)) !== 0)) { for ($i=0;$i<$rows;$i++) { $fields = mysql_num_fields($r); $row = mysql_fetch_array($r); for ($j=0;$j<$fields;$j++) { if ($i === 0) { $columns[$j] = mysql_field_name($r,$j); } $cache[$i][$columns[$j]] = $row[$j]; } } if (!setCache(md5("mysql_query" . $sql),$cache,$timeout)) { # Error en Memcache } } } return $cache; } ?>
Forma de llamar a nuestras funciones php con memcache
<?php $sql = " SELECT `dataID`, `dataTitle` FROM `tbldata` WHERE `dataTypeID` BETWEEN 2 AND 2093 AND `dataStatusID` IN (1,2,3,4) AND `dataTitle` LIKE '%something%' ORDER BY `dataDate` DESC LIMIT 10 "; # Antes: Sin Memcached $rSlowQuery = mysql_query($sql); # $rSlowQuery is a MySQL resource $rows = mysql_num_rows($rSlowQuery); for ($i=0;$i<$rows;$i++) { $dataID = intval(mysql_result($rSlowQuery,$i,"dataID")); $dataTitle = mysql_result($rSlowQuery,$i,"dataTitle"); echo "<a href=\"/somewhere/$dataID\">$dataTitle</a><br />\n"; } # Despues Con Memcache $rSlowQuery = mysql_query_cache($sql); # $rSlowQuery is an array $rows = count($rSlowQuery); for ($i=0;$i<$rows;$i++) { $dataID = intval($rSlowQuery[$i]["dataID"]); $dataTitle = $rSlowQuery[$i]["dataTitle"]; echo "<a href=\"/somewhere/$dataID\">$dataTitle</a><br />\n"; } ?>
Por favor avísanos si hay algún detalle que no esté claro o si tienes alguna duda sobre este procedimiento. Puedes dejarnos un comentario aquí debajo y en breve te daremos una respuesta.