Кеширане
storh включва малки кеш бекендове и няма зависимости по време на изпълнение:
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
);
Кеш слоеве:
- декодирани записи от DocStore
- отрицателни търсения за липсващи записи
- манифести на сегментиран журнал
- разредени индекси на сегменти
Режими на валидиране:
CacheValidation::STAT: проверява съществуването, mtime и размера.CacheValidation::HASH: проверява съществуването, mtime, размера и хеша на съдържанието.CacheValidation::TRUST: пропуска проверката на файловата система при кеш попадения и се доверява на текущата инстанция storh или на споделен кеш бекенд, който публикува изричните записи storh
STAT е бързият режим за валидиране по подразбиране. Използвайте HASH, когато всяко кеш попадение трябва да проверява и файловото съдържание, включително при записи със същия размер, които запазват mtime.
STAT не може да засече промяна извън системата, която запазва едновременно mtime и размера. TRUST е най-бързият режим за еднопроцесни или споделени кеш натоварвания; умишлено не засича файлове, променени извън storh.
Cache::memory() е ограничен по брой записи и по байтове. Когато maxBytes не е зададен, той извежда бюджет от PHPmemory_limit.
Cache::apcu() не е задължителен. Ако APCu не е наличен или е изключен за текущия SAPI, той работи като бекенд без действие.
Кога да добавите такъв
DocStore винаги поддържа малки кешове за всеки екземпляр на вече прочетените или записани от него записи, валидирани според зададения режим. Добавянето на бекенд осигурява кеш, който остава наличен и след унищожаването на екземпляра: Cache::memory() е полезен за дълго работещи процеси, които отварят отново хранилища, а Cache::apcu() споделя декодирани записи между заявки към PHP-FPM. Бенчмарковете показват около 83 µs за студено четене с кеш в паметта срещу 6 µs за топло попадение, валидирано със STAT.