Buforowanie
storh zawiera niewielkie backendy pamięci podręcznej i nie wymaga zależności środowiska uruchomieniowego:
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
);
Warstwy pamięci podręcznej:
- zdekodowane rekordy DocStore
- negatywne wyszukiwania brakujących rekordów
- manifesty logu segmentowanego
- rzadkie indeksy segmentów
Tryby walidacji:
CacheValidation::STAT: sprawdza istnienie, mtime i rozmiar.CacheValidation::HASH: sprawdza istnienie, mtime, rozmiar i hash zawartości.CacheValidation::TRUST: pomija walidację systemu plików przy trafieniach i ufa bieżącej instancji storh lub współdzielonemu backendowi pamięci podręcznej, który publikuje jawne zapisy storh.
STAT to domyślny, szybki tryb walidacji. Użyj HASH, gdy każde trafienie w pamięci podręcznej musi również sprawdzać zawartość pliku, w tym zapisy tej samej wielkości zachowujące mtime.
STAT nie wykryje zmiany zawartości spoza procesu, która zachowuje zarówno mtime, jak i rozmiar. TRUST to najszybszy tryb dla pojedynczego procesu lub obciążeń ze współdzieloną pamięcią podręczną; celowo nie wykrywa plików zmienionych poza storh.
Cache::memory() ma limity zarówno liczby wpisów, jak i liczby bajtów. Jeśli nie podano maxBytes, budżet jest wyliczany na podstawie PHP memory_limit.
Cache::apcu() jest opcjonalne. Jeśli APCu jest niedostępne lub wyłączone dla bieżącego SAPI, działa jak backend bez operacji.
Kiedy podłączyć backend
DocStore zawsze przechowuje niewielkie pamięci podręczne dla każdej instancji, obejmujące rekordy, które zostały już odczytane lub zapisane i zweryfikowane zgodnie ze skonfigurowanym trybem. Podłączenie backendu dodaje pamięć podręczną, która działa dłużej niż sama instancja: Cache::memory() pomaga długotrwałym procesom, które ponownie otwierają magazyny, a Cache::apcu() udostępnia zdekodowane rekordy między żądaniami PHP-FPM. Testy wydajności pokazują, że backend pamięci operacyjnej osiąga około 83 µs przy zimnym odczycie i 6 µs przy ciepłym trafieniu zweryfikowanym przez STAT.