Caching
storh wordt geleverd met kleine cachebackends en zonder runtimeafhankelijkheden:
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
);
Cachelagen:
- gedecodeerde DocStore-records
- negatieve lookups van ontbrekende records
- manifesten van gesegmenteerde logs
- sparse segmentindexen
Validatiemodi:
CacheValidation::STAT: controleert bestaan, mtime en grootte.CacheValidation::HASH: controleert bestaan, mtime, grootte en inhoudshash.CacheValidation::TRUST: slaat bestandsvalidatie over bij cachetreffers en vertrouwt erop dat de huidige storh-instantie of een gedeelde cachebackend expliciete storh-schrijfbewerkingen publiceert.
STAT is de standaardmodus voor snelle validatie. Gebruik HASH wanneer elke cachetreffer ook de bestandsinhoud moet valideren, inclusief schrijfbewerkingen van dezelfde grootte die de mtime behouden.
STAT kan een wijziging buiten het proces niet detecteren als zowel de mtime als de grootte behouden blijft. TRUST is de snelste modus voor workloads met één proces of een gedeelde cache; deze detecteert bewust geen bestanden die buiten storh zijn gewijzigd.
Cache::memory() wordt begrensd door het aantal vermeldingen en het aantal bytes. Als maxBytes niet wordt opgegeven, leidt het een budget af van PHP's memory_limit.
Cache::apcu() is optioneel. Als APCu niet beschikbaar is of voor de huidige SAPI is uitgeschakeld,
werkt het als een backend die niets doet.
Wanneer u er een toevoegt
DocStore houdt altijd kleine caches per instantie bij voor records die al zijn gelezen of geschreven, gevalideerd volgens de ingestelde modus. Een backend toevoegen zorgt voor een cache die langer meegaat dan de instantie: Cache::memory() is handig voor langlopende processen die stores opnieuw openen, en Cache::apcu() deelt gedecodeerde records tussen PHP-FPM-verzoeken. De benchmarks meten voor de geheugenbackend ongeveer 83 µs per koude lezing tegenover 6 µs per warme, STAT-gevalideerde treffer.