Armazenamento em cache
storh inclui backends de cache pequenos e nenhuma dependência de execução:
use Storh\Cache;
use Storh\CacheValidation;
$docs = new Storh\DocStore($root, 'pages', cache: Cache::memory(maxEntries: 10000));
$docs = new Storh\DocStore($root, 'pages', cache: Cache::apcu('storh.pages'));
$docs = new Storh\DocStore(
$root,
'pages',
cache: Cache::memory(maxEntries: 100000, maxBytes: 96 * 1024 * 1024),
cache_validation: CacheValidation::TRUST
);
Camadas de cache:
- registros DocStore decodificados
- consultas negativas para registros ausentes
- manifestos do log segmentado
- índices esparsos de segmentos
Modos de validação:
CacheValidation::STAT: validar existência, mtime e tamanho.CacheValidation::HASH: validar existência, mtime, tamanho e hash do conteúdo.CacheValidation::TRUST: ignorar a validação do sistema de arquivos em acertos e confiar na instância storh atual ou em um backend de cache compartilhado para publicar gravações storh explícitas.
STAT é o modo rápido de validação padrão. Use HASH quando cada acerto de cache também precisar
validar o conteúdo dos arquivos, inclusive gravações do mesmo tamanho que preservem o mtime.
STAT não detecta uma alteração externa no conteúdo que preserve tanto o mtime quanto o
tamanho. TRUST é o modo mais rápido para cargas de trabalho de processo único ou cache compartilhado;
intencionalmente não detecta arquivos alterados fora de storh.
Cache::memory() tem limites por quantidade de entradas e por bytes. Quando maxBytes não é
fornecido, o orçamento é calculado com base em memory_limit de PHP.
Cache::apcu() é opcional. Se APCu não estiver disponível ou estiver desativado para o SAPI atual,
ele funciona como um backend sem operação.
Quando conectar um backend
DocStore mantém sempre pequenos caches por instância para registros que já leu ou gravou, validados conforme o modo configurado. Anexar um backend adiciona um cache que sobrevive à instância: Cache::memory() ajuda processos de longa duração que reabrem armazenamentos, e Cache::apcu() compartilha registros decodificados entre solicitações PHP-FPM. Os benchmarks medem o backend de memória em cerca de 83 µs por leitura fria, contra 6 µs por leitura quente validada por STAT.