DevCraft Документации
Руководства

Файловый кэш PSR-6 v1.1.0

FileCachePool: ключи с префиксами, TTL, clearNamespace, формат файлов на диске.

Введение

С 1.1.0 в пакете есть файловый пул кэша Devcraft\Cache\FileCachePool. Он реализует интерфейс PSR-6 (Psr\Cache\CacheItemPoolInterface): запись и чтение через «элементы» кэша, без Symfony Cache и без своей самодельной схемы файлов поверх file_put_contents.

Зачем это вам: один формат ключей (Translation/dict), срок жизни (TTL), очистка целой «папки» ключей методом clearNamespace() — удобно для словарей, конфигов и тяжёлых выборок.

Предварительные требования

По шагам

Создать пул

Второй аргумент — TTL по умолчанию в секундах. null или 0 — без срока, пока сам элемент не задаст своё время жизни.

use Devcraft\Cache\FileCachePool;

$pool = new FileCachePool(sys_get_temp_dir() . '/devtools-cache', defaultTtlSeconds: 3600);

Записать и прочитать

В ключе можно писать / — на диске это подкаталог (Translation/dict → файл …/Translation/dict.cache).

$item = $pool->getItem('Translation/dict');
$item->set(['hello' => 'world']);
$pool->save($item);

$hit = $pool->getItem('Translation/dict');
$value = $hit->isHit() ? $hit->get() : null;

Очистить префикс

clearNamespace() — расширение Dev Tools (в PSR-6 такого метода нет): удаляет все ключи вида {префикс}/….

$pool->clearNamespace('Translation');

Полный пример

use Devcraft\Cache\FileCachePool;

$pool = new FileCachePool('/path/to/cache', defaultTtlSeconds: 3600);

$item = $pool->getItem('Translation/dict');
$item->set(['hello' => 'world']);
$pool->save($item);

$hit = $pool->getItem('Translation/dict');
if ($hit->isHit()) {
    $value = $hit->get();
}

$pool->clearNamespace('Translation'); // расширение Dev Tools (не из PSR-6)

Ключи и хранение

ПравилоДетали
Разрешенобуквы, цифры, / как разделитель уровней
Запрещеносимволы {}()\@:, а также ..
Путь файла{каталог}/{ключ}.cache
СодержимоеJSON { "e": срокUnix|null, "f": "j"|"s", "v": значение }

Формат j — значение как JSON; sserialize + base64 для данных, которые в JSON не кладутся.

В DevCraft Admin

В оболочке Admin класс CacheControl — тонкая обёртка: setCache($type, $name, $data) → ключ {type}/{name} → тот же FileCachePool. Для нового кода удобнее брать CacheControl::pool() и работать с PSR-6 напрямую.

Связанные разделы

На этой странице