Hay dos tipos de backends: estándar y extendidos. Por supuesto, los backends extendidos ofrecen más funcionalidades.
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) |
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().
|
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
|
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 |
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.
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()
|
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.
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é) |
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.
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.
![]() |
Nota |
|---|---|
|
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.
![]() |
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 |
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.
|
![[Note]](images/note.png)