Кэширование
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: проверка наличия, времени изменения и размера.CacheValidation::HASH: проверка наличия, времени изменения, размера и хеша содержимого.CacheValidation::TRUST: пропуск проверки файловой системы при попадании в кэш и доверие текущему экземпляру storh или общему серверному кэшу, который сообщает об изменениях storh.
STAT — быстрый режим проверки по умолчанию. Используйте HASH, если при каждом попадании в кэш нужно также проверять содержимое файлов, в том числе при записи того же размера с сохранением времени изменения.
STAT не обнаруживает внешнее изменение содержимого, если оно сохраняет время изменения и размер. TRUST — самый быстрый режим для одного процесса или рабочей нагрузки с общим кэшем; он намеренно не обнаруживает изменения файлов вне storh.
Cache::memory() ограничен числом записей и объёмом в байтах. Если maxBytes не задан, бюджет рассчитывается на основе memory_limit PHP.
Cache::apcu() необязателен. Если APCu недоступен или отключён для текущего SAPI, он работает как пустая серверная часть.
Когда подключать кэш
DocStore всегда хранит небольшие кэши для уже прочитанных или записанных записей; они проверяются в соответствии с выбранным режимом. Подключение серверной части добавляет кэш, который сохраняется дольше экземпляра: Cache::memory() полезен для длительно работающих процессов, повторно открывающих хранилища, а Cache::apcu() позволяет совместно использовать декодированные записи между запросами PHP-FPM. В тестах производительности benchmarks время чтения составляет около 83 µs для холодного чтения с серверной частью в памяти и 6 µs для тёплого попадания с проверкой STAT.