Memorizzazione nella cache
storh include backend di cache leggeri e non richiede dipendenze a runtime:
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
);
Livelli di cache:
- record DocStore decodificati
- ricerche negative di record mancanti
- manifest di SegmentedLog
- indici sparsi dei segmenti
Modalità di validazione:
CacheValidation::STAT: verifica esistenza, mtime e dimensione.CacheValidation::HASH: verifica esistenza, mtime, dimensione e hash del contenuto.CacheValidation::TRUST: salta la validazione del file system sugli accessi alla cache e si affida all'istanza storh corrente o a un backend di cache condiviso per pubblicare esplicitamente le scritture storh.
STAT è la modalità di validazione rapida predefinita. Usate HASH quando ogni accesso alla cache deve
verificare anche il contenuto dei file, comprese le scritture della stessa dimensione che mantengono l'mtime.
STAT non rileva una modifica esterna del contenuto che mantenga invariati mtime e
dimensione. TRUST è la modalità più veloce per processi singoli o carichi con cache condivisa;
intenzionalmente non rileva i file modificati al di fuori di storh.
Cache::memory() ha limiti sia per numero di voci sia per byte. Se maxBytes non viene
fornito, ricava il budget da memory_limit di PHP.
Cache::apcu() è opzionale. Se APCu non è disponibile o è disabilitato per il SAPI corrente,
si comporta come un backend inattivo.
Quando collegarne uno
DocStore mantiene sempre piccole cache per istanza dei record già letti
o scritti, validati secondo la modalità configurata. Collegare un backend aggiunge
una cache che sopravvive all'istanza: Cache::memory() è utile per i processi di lunga durata
che riaprono gli archivi, mentre Cache::apcu() condivide i record decodificati tra le richieste di PHP-FPM. I benchmark misurano circa 83 µs per una lettura a freddo con il backend in memoria e 6 µs per un accesso a caldo con validazione STAT.