Cache
webman/cache é um componente de cache baseado em symfony/cache, compatível com ambientes de corotina e não corotina, com suporte a pool de conexões.
Instalação
composer require -W webman/cache
Exemplo
<?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));
}
}
Localização do arquivo de configuração
O arquivo de configuração está em config/cache.php. Crie-o manualmente se não existir.
Conteúdo do arquivo de configuração
<?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 suporta quatro drivers: file, redis, array e apcu.
Driver file
Driver padrão. Sem dependências externas. Suporta compartilhamento de cache entre processos. Não suporta compartilhamento entre múltiplos servidores.
Driver array
Armazenamento em memória com melhor desempenho, mas consome memória. Não suporta compartilhamento entre processos ou servidores. Os dados são perdidos ao reiniciar o processo. Típico para projetos com volume de cache pequeno.
Driver apcu
Armazenamento em memória. Desempenho inferior apenas ao array. Suporta compartilhamento de cache entre processos. Não suporta compartilhamento entre múltiplos servidores. Os dados são perdidos ao reiniciar o processo. Típico para projetos com volume de cache pequeno.
Requer a instalação e ativação da extensão APCu. Não recomendado para cenários com escrita/exclusão frequente de cache, pois pode causar degradação significativa de desempenho.
Driver redis
Depende do componente webman/redis. Suporta compartilhamento de cache entre processos e servidores.
stores.redis.connection
stores.redis.connection corresponde à chave definida em config/redis.php. Ao usar Redis, reutiliza a configuração de webman/redis, incluindo o pool de conexões.
Recomenda-se adicionar uma configuração Redis dedicada ao cache em config/redis.php, por exemplo:
<?php
return [
'default' => [
'password' => 'abc123',
'host' => '127.0.0.1',
'port' => 6379,
'database' => 0,
],
'cache' => [ // <==== Adicionar novo
'password' => 'abc123',
'host' => '127.0.0.1',
'port' => 6379,
'database' => 1,
'prefix' => 'webman_cache-',
]
];
Em seguida, defina stores.redis.connection como cache. O arquivo config/cache.php final deve ficar assim:
<?php
return [
'default' => 'redis', // <====
'stores' => [
'file' => [
'driver' => 'file',
'path' => runtime_path('cache')
],
'redis' => [
'driver' => 'redis',
'connection' => 'cache' // <====
],
'array' => [
'driver' => 'array'
]
]
];
Trocar de armazenamento
É possível alternar manualmente o armazenamento para usar drivers diferentes, por exemplo:
Cache::store('redis')->set('key', 'value');
Cache::store('array')->set('key', 'value');
Dica
Os nomes das chaves de cache são restringidos por PSR-6 e não devem conter nenhum destes caracteres:{}()/\@:. A partir desymfony/cache7.2.4, essa verificação pode ser ignorada configurando a opção PHP inizend.assertions=-1.
Usar outros componentes de cache
Consulte outros bancos de dados para o componente ThinkCache.