Перейти до вмісту

Кешування

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 не задано, бюджет визначається на основі PHP: memory_limit.

Cache::apcu() необов’язковий. Якщо APCu недоступний або вимкнений для поточного SAPI, він працює як порожній бекенд.

Коли підключати кеш

DocStore завжди підтримує невеликі кеші для кожного екземпляра: у них зберігаються записи, які вже було прочитано або записано, з перевіркою відповідно до налаштованого режиму. Підключення бекенда додає кеш, який зберігається довше за екземпляр: Cache::memory() корисний для довготривалих процесів, які повторно відкривають сховища, а Cache::apcu() надає спільний доступ до декодованих записів між запитами PHP-FPM. У бенчмарках для кешу в пам’яті виміряно близько 83 µs на холодне читання проти 6 µs на тепле звернення з перевіркою STAT.