Файловый кэш 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; s — serialize + base64 для данных, которые в JSON не кладутся.
В DevCraft Admin
В оболочке Admin класс CacheControl — тонкая обёртка: setCache($type, $name, $data) → ключ {type}/{name} → тот же FileCachePool. Для нового кода удобнее брать CacheControl::pool() и работать с PSR-6 напрямую.