Caché
webman/cache es un componente de caché basado en symfony/cache, compatible con entornos con y sin corutinas, y con soporte de grupo de conexiones.
Instalación
composer require -W webman/cache
Ejemplo
<?php
namespace app\controller;
use support\Request;
use support\Cache;
class UserController
{
public function db(Request $request)
{
$key = 'test_key';
Cache::set($key, rand());
return response(Cache::get($key));
}
}
Ubicación del archivo de configuración
El archivo de configuración está en config/cache.php. Créelo manualmente si no existe.
Contenido del archivo de configuración
<?php
return [
'default' => 'file',
'stores' => [
'file' => [
'driver' => 'file',
'path' => runtime_path('cache')
],
'redis' => [
'driver' => 'redis',
'connection' => 'default'
],
'array' => [
'driver' => 'array'
],
'apcu' => [
'driver' => 'apcu'
]
]
];
stores.driver admite cuatro controladores: file, redis, array y apcu.
controlador file
Es el controlador por defecto. No tiene dependencias externas. Permite compartir caché entre procesos. No permite compartir entre varios servidores.
controlador array
Almacenamiento en memoria con el mejor rendimiento, pero consume memoria. No permite compartir entre procesos ni servidores. Los datos se pierden al reiniciar el proceso. Suele usarse en proyectos con poco volumen de caché.
controlador apcu
Almacenamiento en memoria. Su rendimiento solo es superado por array. Permite compartir caché entre procesos. No permite compartir entre varios servidores. Los datos se pierden al reiniciar el proceso. Suele usarse en proyectos con poco volumen de caché.
Se requiere instalar y habilitar la extensión APCu. No se recomienda en escenarios con escrituras/eliminaciones frecuentes de caché, ya que puede provocar una degradación notable del rendimiento.
controlador redis
Depende del componente webman/redis. Permite compartir caché entre procesos y servidores.
stores.redis.connection
stores.redis.connection corresponde a la clave definida en config/redis.php. Al usar Redis, reutiliza la configuración de webman/redis, incluido el grupo de conexiones.
Se recomienda añadir una configuración de Redis dedicada en config/redis.php para caché, por ejemplo:
<?php
return [
'default' => [
'password' => 'abc123',
'host' => '127.0.0.1',
'port' => 6379,
'database' => 0,
],
'cache' => [ // <==== Añadir nuevo
'password' => 'abc123',
'host' => '127.0.0.1',
'port' => 6379,
'database' => 1,
'prefix' => 'webman_cache-',
]
];
Luego asigne stores.redis.connection a cache. El config/cache.php final debería verse así:
<?php
return [
'default' => 'redis', // <====
'stores' => [
'file' => [
'driver' => 'file',
'path' => runtime_path('cache')
],
'redis' => [
'driver' => 'redis',
'connection' => 'cache' // <====
],
'array' => [
'driver' => 'array'
]
]
];
Cambio de almacenamiento
Puede cambiar manualmente el almacenamiento para usar distintos controladores, por ejemplo:
Cache::store('redis')->set('key', 'value');
Cache::store('array')->set('key', 'value');
Consejo
Los nombres de las claves de caché están restringidos por PSR-6 y no deben contener ninguno de estos caracteres:{}()/\@:. A partir desymfony/cache7.2.4, esta comprobación puede evitarse configurando en PHP ini la opciónzend.assertions=-1.
Uso de otros componentes de caché
Consulte Other Databases para el componente ThinkCache.