Caching
storh wird mit kleinen Cache-Backends und ohne Laufzeitabhängigkeiten ausgeliefert:
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
);
Cache-Ebenen:
- Decodierte DocStore-Datensätze
- Negative Suchergebnisse für fehlende Datensätze
- Manifeste segmentierter Logs
- Sparse-Indizes für Segmente
Validierungsmodi:
CacheValidation::STAT: Existenz, Änderungszeit und Größe validieren.CacheValidation::HASH: Existenz, Änderungszeit, Größe und Inhalts-Hash validieren.CacheValidation::TRUST: Bei Treffern die Dateisystemvalidierung überspringen und darauf vertrauen, dass die aktuelle storh-Instanz oder ein gemeinsam genutztes Cache-Backend explizite storh-Schreibvorgänge veröffentlicht.
STAT ist der schnelle Standardmodus für die Validierung. Verwende HASH, wenn bei jedem Cache-Treffer auch der Dateiinhalt geprüft werden muss, einschließlich gleich großer Schreibvorgänge bei unveränderter Änderungszeit. STAT erkennt keine externe Inhaltsänderung, bei der sowohl Änderungszeit als auch Größe gleich bleiben. TRUST ist der schnellste Modus für Einzelprozesse oder gemeinsam genutzte Cache-Workloads. Er erkennt absichtlich keine Änderungen an Dateien außerhalb von storh.
Cache::memory() ist durch die Anzahl der Einträge und die Bytezahl begrenzt. Wenn maxBytes nicht angegeben ist, wird ein Budget aus PHP's memory_limit abgeleitet.
Cache::apcu() ist optional. Wenn APCu für die aktuelle SAPI nicht verfügbar oder deaktiviert ist, verhält es sich wie ein Backend ohne Funktion.
Wann du ein Backend anbinden solltest
DocStore hält immer kleine Instanz-Caches für bereits gelesene oder geschriebene Datensätze vor, die entsprechend dem konfigurierten Modus validiert werden. Wenn du ein Backend anbindest, kommt ein Cache hinzu, der die Instanz überdauert: Cache::memory() ist hilfreich für lange laufende Prozesse, die Stores erneut öffnen, und Cache::apcu() teilt decodierte Datensätze über PHP-FPM-Anfragen hinweg. Die Benchmarks messen für den Memory-Cache etwa 83 µs pro kaltem Lesevorgang gegenüber 6 µs für einen warmen, STAT-validierten Treffer.