Close
Image Alt

Caché de datos en WordPress (2): WP Object cache

En un artículo anterior, el primero dedicado a la caché de datos en WordPress, vimos el Transient API.

Hablábamos de dos tipos de caché de datos: no-persistente y persistente. En el primer caso, la información se almacena en memoria sólo lo necesario para cargar la página actual. Esto tiene sentido por ejemplo para una llamada compleja a la base de datos que se repita varias veces en la misma página (la segunda vez tomará los datos de la caché). Si es no-persistente se almacena durante un tiempo determinado durante el cual no desaparece.

Tal y como comentábamos, Transients API es persistente. Almacena los resultados en la base de datos (en la tabla de Opciones) a no ser que se instale un plugin tipo WT3 Total Cache o similar. En ese caso las funciones del Transients API utilizarán las funciones de wp_cache que describiremos más adelante.

Veamos una captura de una base de datos, de la tabla wp_options donde vemos los transients almacenados:

Transient API

¿Esto qué implica? Utiliza Transients API en vez de WP Object Cache (que veremos a continuación) si necesitas estar seguro de que los datos se van a cachear de manera persistente y no sabes el entorno de servidor que vas a tener (donde quizás no tengas ningún servicio de APC cache o memcache instalado), ya que al menos se grabarán en la base de datos. Por eso decíamos que Transients API son perfectos para cachear servicios externos, como Twitter.
En caso contrario, utiliza las funciones que vamos a ver a continuación (que almacenan los datos de manera no persistente a no ser que tengas instalado un plugin tipo WT3 Total Cache o similar).

Funciones wp_cache

La mayor parte de las funciones que vamos a ver a continuación toman 4 parámetros:

  • $key: Una clave que lo identifica.
  • $data: el valor que quieres almacenar.
  • $group: (opcional) para agrupar datos en la caché. Te permite usar la misma clave en diferentes grupos.
  • $expire: (opcional) define durante cuántos segundos de va a guardar la caché. Por defecto es 0 (tan largo como sea posible).

Añadiendo datos a la caché

La primera función que vamos a ver es wp_cache_add. Añade los datos a la caché en el caso de que la clave ($key) no exista previamente. Si existe no se añaden los datos y la función devuelve FALSE.

La segunda función es wp_cache_set. Se diferencia de la anterior en que si la clave ($key) existe se almacenan los datos borrando los anteriores. Si no existe, se crea.

Obteniendo datos de la caché

Si ya tenemos nuestros datos almacenados en la caché y queremos recuperarlos usaremos la función wp_cache_get. Esta función devuelve el valor del objeto que se ha guardado en la caché. Devuelve FALSE si la clave ($key) no existe.

Borrando datos de la caché

Para borrar datos utilizamos la función wp_cache_delete. Elimina los datos de la caché para una clave ($key) determinada.

Remplazando datos de la cache

Con la función wp_cache_replace reemplazamos el valor almacenado en la caché en el caso de que este exista. Si no existe no se añade nada.

Eliminando todos los datos de la caché

Esto lo hacemos con la función wp_cache_flush.

Ejemplos

Bueno ya hemos visto la teoría. Ahora vamos a ver algunos ejemplos, que es la mejor manera de entenderlo.

Veamos el ejemplo que nos ofrece WordPress:

Como vemos primero intentamos obtener los datos de la caché. Para identificarlo tenemos lo que más arriba denominamos $key: Una clave que lo identifica, en este caso “mis_resultados”.

En el caso de que no haya nada ejecutamos la llamada a la base de datos para obtener los datos que fueran necesarios y el resultado lo almacenamos en la caché con wp_cache_set.

Veamos otro ejemplo, este caso para una instalación de WordPress Multiusuario. Como sabemos, la función switch_to_blog() hay que usarla con mucho cuidado (parece ser que con WordPress 1.5 van a mejorar las cosas…). Una manera de evitar su uso frecuente sería la siguiente:

Como veis hemos utilizado un atributo adicional, añadiendo el $blog_id o ID del blog del que queríamos obtener los datos. Este segundo atributo es al que llamábamos más arriba $group: (opcional) para agrupar datos en la caché. Te permite usar la misma clave en diferentes grupos. Es decir, podemos usar la clave “ultimo_post” una vez por cada blog_id (cada blog_id sería un grupo).

Espero que los dos artículos que hemos dedicado a la caché de datos en WordPress hayan sido lo suficientemente clarificadores sobre la importancia de no confiar en que esté o no esté instalado el plugin de turno y mantengamos nuestro código preparado para cualquier situación o entorno en el que se encuentre la web.

Post a Comment