Demóstenes García G.

  • Archive
  • RSS

Usando CodeIgniter Cache más limpiamente

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)

    • #codeigniter
    • #php
    • #cache
    • #dry
  • 8 months ago
  • 56
  • Comments
  • Permalink
  • Share
    Tweet

56 Notes/ Hide

  1. emileeyou89 liked this
  2. demogar posted this

Recent comments

Blog comments powered by Disqus
← Previous • Next →

Portrait/Logo

About

I'm a 24 years old Electronics Engineering Student, Developer and Gamer.

I work for Admios as a RIA/Flex developer, I founded Pixmat where we mainly do web development and I developed Panagamers, the biggest and most important gaming community in Panama.

Me, Elsewhere

  • @demogar on Twitter
  • Facebook Profile
  • demogar on Vimeo
  • demogar on Youtube
  • demogar on Flickr
  • demogar on Delicious
  • demogar on Last.fm
  • demogar on Grooveshark
  • demogar on Foursquare
  • demogar on Gowalla
  • My Skype Info
  • Linkedin Profile
  • demogar on github

Twitter

loading tweets…

Following

  • RSS
  • Random
  • Archive
  • Mobile

Effector Theme by Carlo Franco.

Powered by Tumblr