Cache缓存
webman/cache es un componente de caché desarrollado sobre symfony/cache, compatible con entornos de corutinas y no corutinas, y soporta conexiones en pool.
Nota
Este manual corresponde a la versión webman v2. Si está utilizando la versión webman v1, consulte el manual de la versión v1.
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 se encuentra en config/cache.php
. Si no existe, créelo manualmente.
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 4 tipos de controladores: file, redis, array, apcu.
file controlador de archivos
Este es el controlador predeterminado, no depende de otros componentes, soporta el intercambio de datos de caché entre procesos, pero no soporta el intercambio de datos de caché entre múltiples servidores.
array controlador en memoria
Almacenamiento en memoria, con el mejor rendimiento, pero consume memoria. No soporta el intercambio de datos entre procesos y servidores, se invalida al reiniciar el proceso y se usa generalmente para proyectos con un pequeño volumen de datos en caché.
apcu controlador en memoria
Almacenamiento en memoria, con un rendimiento solo inferior al de array, soporta el intercambio de datos de caché entre procesos, no soporta el intercambio de datos de caché entre múltiples servidores, se invalida al reiniciar el proceso y se usa generalmente para proyectos con un pequeño volumen de datos en caché.
Se necesita instalar y habilitar la extensión APCu; no se recomienda para escenarios de escritura/borrado frecuente de caché, ya que puede causar una notable disminución en el rendimiento.
redis controlador
Dependiente del componente webman/redis, soporta el intercambio de datos de caché entre procesos y entre servidores.
stores.redis.connection
stores.redis.connection
corresponde a la clave en config/redis.php
. Al usar redis, reutilizará la configuración de `webman/redis', incluida la configuración del pool de conexiones.
Se recomienda agregar una configuración independiente en config/redis.php
, como cache, similar a la siguiente
<?php
return [
'default' => [
'password' => 'abc123',
'host' => '127.0.0.1',
'port' => 6379,
'database' => 0,
],
'cache' => [ // <==== nuevo
'password' => 'abc123',
'host' => '127.0.0.1',
'port' => 6379,
'database' => 1,
'prefix' => 'webman_cache-',
]
];
Luego, configure stores.redis.connection
como cache
, la configuración final de config/cache.php
sería similar a la siguiente
<?php
return [
'default' => 'redis', // <====
'stores' => [
'file' => [
'driver' => 'file',
'path' => runtime_path('cache')
],
'redis' => [
'driver' => 'redis',
'connection' => 'cache' // <====
],
'array' => [
'driver' => 'array'
]
]
];
Cambiar Almacenamiento
Se puede cambiar manualmente el almacenamiento utilizando el siguiente código para utilizar diferentes controladores de almacenamiento, por ejemplo
Cache::store('redis')->set('key', 'value');
Cache::store('array')->set('key', 'value');
Sugerencia
El nombre de la clave está sujeto a las restricciones de PSR6 que no permiten la inclusión de ninguno de los caracteres{}()/\@:
; sin embargo, esta restricción se puede eludir temporalmente configurandozend.assertions=-1
en PHP ini (hasta la fecha desymfony/cache
7.2.4).
Usando otros componentes de Cache
Para referencia sobre el componente ThinkCache, consulte Otros bases de datos.