TigerZF
🌐Español

17.4. Zend_Cache Backends

Hay dos tipos de backends: estándar y extendidos. Por supuesto, los backends extendidos ofrecen más funcionalidades.

17.4.1. Zend_Cache_Backend_File

Este backend (extendido) almacena los registros de caché en archivos (en un directorio elegido).

Las opciones disponibles son:

Tabla 17.6. Opciones del backend File

Opción Tipo de dato Valor por defecto Descripción
cache_dir String [directorio temporal del sistema] Directorio donde almacenar los archivos de caché
file_locking Boolean TRUE Activa o desactiva file_locking: puede evitar la corrupción de la caché en circunstancias adversas, pero no ayuda en servidores web multihilo o en sistemas de archivos NFS...
read_control Boolean TRUE Activa / desactiva el control de lectura: si está activado, se incrusta una clave de control en el archivo de caché y esta clave se compara con la calculada tras la lectura.
read_control_type String 'crc32' Tipo de control de lectura (solo si el control de lectura está activado). Los valores disponibles son: 'md5' (el mejor pero el más lento), 'crc32' (ligeramente menos seguro pero más rápido, mejor opción), 'adler32' (nueva opción, más rápida que crc32), 'strlen' para una prueba de solo longitud (el más rápido).
hashed_directory_level Integer 0 Nivel de estructura de directorios con hash: 0 significa "sin estructura de directorios con hash", 1 significa "un nivel de directorio", 2 significa "dos niveles"... Esta opción puede acelerar la caché solo cuando se tienen muchos miles de archivos de caché. Solo pruebas específicas pueden ayudarle a elegir el valor perfecto para usted. Quizás, 1 o 2 sea un buen comienzo.
hashed_directory_perm Integer 0700 Permisos para la estructura de directorios con hash
file_name_prefix String 'zend_cache' prefijo para los archivos de caché; tenga mucho cuidado con esta opción porque un valor demasiado genérico en un directorio de caché del sistema (como /tmp) puede causar desastres al limpiar la caché
cache_file_umask Integer 0600 umask para los archivos de caché
cache_file_perm Integer 0600 Permisos para los archivos de caché
metatadatas_array_max_size Integer 100 tamaño máximo interno para el array de metadatos (no cambie este valor a menos que sepa lo que está haciendo)

17.4.2. Zend_Cache_Backend_Sqlite

Este backend (extendido) almacena los registros de caché en una base de datos SQLite.

Las opciones disponibles son:

Tabla 17.7. Opciones del backend Sqlite

Opción Tipo de dato Valor por defecto Descripción
cache_db_complete_path (obligatorio) String NULL La ruta completa (incluido el nombre del archivo) de la base de datos SQLite
automatic_vacuum_factor Integer 10 Desactiva / ajusta el proceso de vacuum automático. El proceso de vacuum automático desfragmenta el archivo de la base de datos (y lo hace más pequeño) cuando se llama a clean() o delete(): 0 significa sin vacuum automático; 1 significa vacuum sistemático (cuando se llama a los métodos delete() o clean()); x (entero) > 1 => vacuum automático de forma aleatoria 1 vez de cada x llamadas a clean() o delete().

17.4.3. Zend_Cache_Backend_Memcached

Este backend (extendido) almacena los registros de caché en un servidor memcached. memcached es un sistema de caché de objetos en memoria distribuido de alto rendimiento. Para usar este backend, necesita un demonio memcached y la extensión PECL memcache.

Tenga cuidado: con este backend, las "tags" no son compatibles por el momento, como tampoco el argumento "doNotTestCacheValidity=true".

Las opciones disponibles son:

Tabla 17.8. Opciones del backend Memcached

Opción Tipo de dato Valor por defecto Descripción
servers Array array(array('host' => 'localhost', 'port' => 11211, 'persistent' => true, 'weight' => 1, 'timeout' => 5, 'retry_interval' => 15, 'status' => true, 'failure_callback' => '' )) Un array de servidores memcached; cada servidor memcached se describe mediante un array asociativo: 'host' => (string): el nombre del servidor memcached, 'port' => (int): el puerto del servidor memcached, 'persistent' => (bool): usar o no conexiones persistentes a este servidor memcached, 'weight' => (int): el peso del servidor memcached, 'timeout' => (int): el tiempo de espera del servidor memcached, 'retry_interval' => (int): el intervalo de reintento del servidor memcached, 'status' => (bool): el estado del servidor memcached, 'failure_callback' => (callback): el failure_callback del servidor memcached
compression Boolean FALSE TRUE si desea usar compresión al vuelo
compatibility Boolean FALSE TRUE si desea usar este modo de compatibilidad con servidores o extensiones memcache antiguos

17.4.4. Zend_Cache_Backend_Libmemcached

Este backend (extendido) almacena los registros de caché en un servidor memcached. memcached es un sistema de caché de objetos en memoria distribuido de alto rendimiento. Para usar este backend, necesita un demonio memcached y la extensión PECL memcached.

Tenga cuidado: con este backend, las "tags" no son compatibles por el momento, como tampoco el argumento "doNotTestCacheValidity=true".

Las opciones disponibles son:

Tabla 17.9. Opciones del backend Libmemcached

Opción Tipo de dato Valor por defecto Descripción
servers Array array(array('host' => 'localhost', 'port' => 11211, 'weight' => 1)) Un array de servidores memcached; cada servidor memcached se describe mediante un array asociativo: 'host' => (string): el nombre del servidor memcached, 'port' => (int): el puerto del servidor memcached, 'weight' => (int): el peso del servidor memcached
client Array array( Memcached::OPT_DISTRIBUTION => Memcached::DISTRIBUTION_CONSISTENT, Memcached::OPT_HASH => Memcached::HASH_MD5, Memcached::OPT_LIBKETAMA_COMPATIBLE => true ) Un array asociativo de opciones del cliente memcached; la clave del array puede ser el nombre de la constante de opción memcached (sin 'OPT_') o su valor entero. Vea las constantes de Memcached en el manual de PHP

17.4.5. Zend_Cache_Backend_Apc

Este backend (extendido) almacena los registros de caché en memoria compartida a través de la extensión APC (Alternative PHP Cache) (la cual es, por supuesto, necesaria para usar este backend).

Tenga cuidado: con este backend, las "tags" no son compatibles por el momento, como tampoco el argumento "doNotTestCacheValidity=true".

No hay opciones para este backend.

17.4.6. Zend_Cache_Backend_Xcache

Este backend almacena los registros de caché en memoria compartida a través de la extensión XCache (la cual es, por supuesto, necesaria para usar este backend).

Tenga cuidado: con este backend, las "tags" no son compatibles por el momento, como tampoco el argumento "doNotTestCacheValidity=true".

Las opciones disponibles son:

Tabla 17.10. Opciones del backend Xcache

Opción Tipo de dato Valor por defecto Descripción
user String NULL xcache.admin.user, necesario para el método clean()
password String NULL xcache.admin.pass (en texto claro, no MD5), necesario para el método clean()

17.4.7. Zend_Cache_Backend_ZendPlatform

Este backend utiliza la API de caché de contenido del producto Zend Platform. Naturalmente, para usar este backend necesita tener instalado Zend Platform.

Este backend admite tags, pero no admite el modo de limpieza CLEANING_MODE_NOT_MATCHING_TAG.

Especifique este backend usando un separador de palabras -- '-', '.', ' ', o '_' -- entre las palabras 'Zend' y 'Platform' al usar el método Zend_Cache::factory():

$cache = Zend_Cache::factory('Core', 'Zend Platform');

No hay opciones para este backend.

17.4.8. Zend_Cache_Backend_TwoLevels

Este backend (extendido) es un híbrido. Almacena los registros de caché en otros dos backends: uno rápido (pero limitado) como Apc, Memcache... y uno "lento" como File, Sqlite...

Este backend utilizará el parámetro de prioridad (dado a nivel del frontend al almacenar un registro) y el espacio restante en el backend rápido para optimizar el uso de estos dos backends.

Especifique este backend usando un separador de palabras -- '-', '.', ' ', o '_' -- entre las palabras 'Two' y 'Levels' al usar el método Zend_Cache::factory():

$cache = Zend_Cache::factory('Core', 'Two Levels');

Las opciones disponibles son:

Tabla 17.11. Opciones del backend TwoLevels

Opción Tipo de dato Valor por defecto Descripción
slow_backend String File el nombre del backend "lento"
fast_backend String Apc el nombre del backend "rápido"
slow_backend_options Array array() las opciones del backend "lento"
fast_backend_options Array array() las opciones del backend "rápido"
slow_backend_custom_naming Boolean FALSE si es TRUE, el argumento slow_backend se usa como un nombre de clase completo; si es FALSE, el argumento del frontend se usa como el final del nombre de clase "Zend_Cache_Backend_[...]"
fast_backend_custom_naming Boolean FALSE si es TRUE, el argumento fast_backend se usa como un nombre de clase completo; si es FALSE, el argumento del frontend se usa como el final del nombre de clase "Zend_Cache_Backend_[...]"
slow_backend_autoload Boolean FALSE si es TRUE, no habrá require_once para el backend lento (útil solo para backends personalizados)
fast_backend_autoload Boolean FALSE si es TRUE, no habrá require_once para el backend rápido (útil solo para backends personalizados)
auto_refresh_fast_cache Boolean TRUE si es TRUE, refresca automáticamente la caché rápida cuando se acierta un registro de caché
stats_update_factor Integer 10 desactiva / ajusta el cálculo del porcentaje de llenado del backend rápido (al guardar un registro en caché, el cálculo del porcentaje de llenado del backend rápido se realiza de forma aleatoria 1 vez de cada x escrituras de caché)

17.4.9. Zend_Cache_Backend_ZendServer_Disk y Zend_Cache_Backend_ZendServer_ShMem

Estos backends almacenan los registros de caché utilizando la funcionalidad de caché de Zend Server.

Tenga cuidado: con estos backends, las "tags" no son compatibles por el momento, como tampoco el argumento "doNotTestCacheValidity=true".

Estos backends solo funcionan dentro del entorno de Zend Server para páginas solicitadas a través de HTTP o HTTPS y no funcionan para la ejecución de scripts en línea de comandos

Especifique este backend usando el parámetro customBackendNaming como TRUE al usar el método Zend_Cache::factory():

$cache = Zend_Cache::factory('Core', 'Zend_Cache_Backend_ZendServer_Disk',
                             $frontendOptions, $backendOptions, false, true);

No hay opciones para este backend.

17.4.10. Zend_Cache_Backend_Static

Este backend funciona junto con Zend_Cache_Frontend_Capture (los dos deben usarse conjuntamente) para guardar la salida de las peticiones como archivos estáticos. Esto significa que los archivos estáticos se sirven directamente en peticiones posteriores sin ninguna intervención de PHP o de Zend Framework.

[Note] Nota

Zend_Cache_Frontend_Capture opera registrando una función de callback que se llama cuando se limpia el buffer de salida que utiliza. Para que esto funcione correctamente, debe ser el buffer de salida final de la petición. Para garantizar esto, el buffering de salida usado por el Dispatcher debe desactivarse llamando al método setParam() de Zend_Controller_Front, por ejemplo, $front->setParam('disableOutputBuffering', true); o añadiendo "resources.frontcontroller.params.disableOutputBuffering = true" a su archivo de configuración del bootstrap (asumiendo INI) si utiliza Zend_Application.

Los beneficios de esta caché incluyen un gran aumento del rendimiento, ya que todas las peticiones posteriores devuelven el archivo estático y no necesitan ningún procesamiento dinámico. Por supuesto, esto también tiene algunas desventajas. La única forma de volver a intentar la petición dinámica es purgar el archivo cacheado desde algún otro lugar de la aplicación (o mediante un cronjob si está temporizado). También está restringido a aplicaciones de un único servidor donde solo se usa un sistema de archivos. Sin embargo, puede ser un medio poderoso para obtener más rendimiento sin incurrir en el coste de un proxy en máquinas únicas.

Antes de describir sus opciones, debe tener en cuenta que esto necesita algunos cambios en el archivo .htaccess predeterminado para que las peticiones se dirijan a los archivos estáticos si existen. Aquí tiene un ejemplo de una aplicación sencilla que cachea contenido, incluyendo dos feeds específicos que necesitan tratamiento adicional para servir una cabecera Content-Type correcta:

AddType application/rss+xml .xml
AddType application/atom+xml .xml

RewriteEngine On

RewriteCond %{REQUEST_URI} feed/rss$
RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}.xml -f
RewriteRule .* cached/%{REQUEST_URI}.xml [L,T=application/rss+xml]

RewriteCond %{REQUEST_URI} feed/atom$
RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}.xml -f
RewriteRule .* cached/%{REQUEST_URI}.xml [L,T=application/atom+xml]

RewriteCond %{DOCUMENT_ROOT}/cached/index.html -f
RewriteRule ^/*$ cached/index.html [L]
RewriteCond %{DOCUMENT_ROOT}/cached/%{REQUEST_URI}.(html|xml|json|opml|svg) -f
RewriteRule .* cached/%{REQUEST_URI}.%1 [L]

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]

RewriteRule ^.*$ index.php [NC,L]

Lo anterior asume que los archivos estáticos se cachean en el directorio ./public/cached. Cubriremos la opción que configura esta ubicación, "public_dir", más adelante.

Debido a la naturaleza del cacheo de archivos estáticos, la clase del backend ofrece dos métodos adicionales: remove() y removeRecursively(). Ambos aceptan una URI de petición que, cuando se mapea al "public_dir" donde se cachean los archivos estáticos, y tiene añadida una extensión previamente almacenada, proporciona el nombre de un archivo estático a eliminar, o una ruta de directorio a eliminar recursivamente. Debido a las restricciones de Zend_Cache_Backend_Interface, todos los demás métodos como save() aceptan un ID que se calcula aplicando bin2hex() a una URI de petición.

Dado el nivel en el que opera el cacheo estático, este se aborda para un uso más sencillo con el helper de acción Zend_Controller_Action_Helper_Cache. Este helper ayuda a establecer qué acciones de un controlador cachear, con qué tags y con qué extensión. También ofrece métodos para purgar la caché por URI de petición o por tag. El cacheo de archivos estáticos también se ve asistido por Zend_Cache_Manager, que incluye plantillas de configuración preconfiguradas para una caché estática (como Zend_Cache_Manager::PAGECACHE o "page"). Los valores predeterminados de estas pueden configurarse según sea necesario para establecer una ubicación "public_dir" para el cacheo, etc.

[Note] Nota

Debe tenerse en cuenta que la caché estática en realidad utiliza una caché secundaria para almacenar los tags (obviamente no podemos almacenarlos en otro lugar ya que una caché estática no invoca PHP si funciona correctamente). Esta es simplemente una caché Core estándar, y debería usar un backend persistente como File o TwoLevels (para aprovechar el almacenamiento en memoria sin sacrificar la persistencia permanente). El backend incluye la opción "tag_cache" para configurar esto (es obligatoria), o el método setInnerCache().

Tabla 17.12. Opciones del backend Static

Opción Tipo de dato Valor por defecto Descripción
public_dir String NULL Directorio donde almacenar los archivos estáticos. Este debe existir en su directorio público.
file_locking Boolean TRUE Activa o desactiva file_locking: puede evitar la corrupción de la caché en circunstancias adversas, pero no ayuda en servidores web multihilo o en sistemas de archivos NFS...
read_control Boolean TRUE Activa / desactiva el control de lectura: si está activado, se incrusta una clave de control en el archivo de caché y esta clave se compara con la calculada tras la lectura.
read_control_type String 'crc32' Tipo de control de lectura (solo si el control de lectura está activado). Los valores disponibles son: 'md5' (el mejor pero el más lento), 'crc32' (ligeramente menos seguro pero más rápido, mejor opción), 'adler32' (nueva opción, más rápida que crc32), 'strlen' para una prueba de solo longitud (el más rápido).
cache_file_umask Integer 0600 umask para los archivos cacheados.
cache_directory_umask Integer 0700 Umask para los directorios creados dentro de public_dir.
file_extension String '.html' Extensión de archivo predeterminada para los archivos estáticos creados. Esto se puede configurar sobre la marcha, vea Zend_Cache_Backend_Static::save() aunque en general se recomienda confiar en Zend_Controller_Action_Helper_Cache al hacerlo, ya que es más sencillo así que manipular arrays o la serialización manualmente.
index_filename String 'index' Si una URI de petición no contiene información suficiente para construir un archivo estático (normalmente esto significa una llamada de índice, por ejemplo, URI igual a '/'), se usa index_filename en su lugar. Así, '' o '/' se mapearía a 'index.html' (asumiendo que la file_extension predeterminada es '.html').
tag_cache Object NULL Se usa para establecer una caché 'interna' utilizada para almacenar tags y extensiones de archivo asociadas a archivos estáticos. Esta debe establecerse o la caché estática no podrá rastrearse y gestionarse.
disable_caching Boolean FALSE Si se establece en TRUE, los archivos estáticos no se cachearán. Esto forzará que todas las peticiones sean dinámicas aunque estén marcadas para cachearse en los Controladores. Útil para depuración.