Перейти к содержимому

Кэширование

storh включает небольшие серверные части кэша без зависимостей во время выполнения:

PHP
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.