Usando CodeIgniter Cache más limpiamente

04 Oct 2011


CodeIgniter Reactor (la versión de la comunidad) hace un par de meses traía consigo algo debajo del telón: un “driver” para Cache que podría adaptarse con otras tecnologías como APC, y Memcached. Para la versión oficial 2.0.2 de CodeIgniter que salió en abril de este año ya traía incluída el CodeIgniter Cache. Yo mientras seguía usando la librería de Cache de Phil Sturgeon. Este fin de semana pude actualizar Panagamers a CodeIgniter 2.0.3 y con un cambio que hubo en el Core de CodeIgniter la librería quedo totalmente inservible. Tenía dos opciones: o arreglar el problema yo mismo o utilizar el Cache Library de CodeIgniter. Me fui por la segunda, pero tuve que implementar una sub-librería para hacer que el proceso fuese igual o parecido a como lo hacía con la librería de Phil Sturgeon y bueno, he aquí este post.

Lo que se me ocurrió fue hacer otra librería llamada “Pgcache” (Panagamers Cache) que instanciaba al driver de cache, utilizando File-based Cache y que generara los nombres directamente, así podíamos seguir utilizando llamados como $this->pgcache->model(‘nombre_model’, metodo’, $parametros, $tiempo) sin tener que modificar tanto todas las implementaciones viejas. Lastimosamente si había que cambiar de $this->cache a $this->pgcache, ya que al utilizar $this->cache interpretaba el driver directamente y no era lo que queríamos, ya eso es harina de otro costal. El código me quedó de la siguiente forma: Breve explicación Si notamos un poco, el constructor lo único que hace es inicializar el driver de cache, indicando que nuestro adaptador será “file” (o que utilizaremos file-based caching). El método privado _generate_name() lo único que hace es generar el nombre dependiendo de los parámetros que estemos utilizando (como el nombre del modelo, del método que llamamos, los parámetros, etc). Y el método model es el que hace el resto. Pienso hacer otros métodos para librerías, helpers, etc. pero por ahora nos quedamos con las llamadas sólo para los models. Este método comprueba si ya está grabado en el Cache (y está vigente) de ser así lo busca y regresa (deserializado), sino lo serializa y lo graba para entonces retornarlo. Espero que a alguien le sea de ayuda, preferiblemente esto debió estar en inglés que hay un montón de gente pidiendo soluciones para esto en Internet, cuando tenga un poco más de tiempo hago la traducción (a menos que alguien se ofrezca :P)


Demóstenes García G.

Ingeniero Electrónico con experiencia en Ingeniería y Desarrollo de Software. Agilista, interesado en Analítica y Ciencia de Datos. Co-fundador en Pixmat, CIO en IFARHU. Twitter.