Файловый PSR-6 кэш v1.1.0
FileCachePool: ключи с namespace, TTL, clearNamespace, формат на диске.
Введение
С версии 1.1.0 пакет включает файловый PSR-6 pool: Devcraft\Cache\FileCachePool. Он реализует Psr\Cache\CacheItemPoolInterface без Symfony Cache — только файлы и psr/cache.
Предварительные требования
Пошаговое руководство
Создать pool
Второй аргумент — TTL по умолчанию. null или 0 — без истечения, пока item не задал свой expiry.
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;Очистить namespace
clearNamespace() — расширение DevTools (не PSR-6): удаляет все ключи с префиксом {prefix}/.
$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'); // DevTools extension (not in PSR-6)Ключи и хранение
| Правило | Детали |
|---|---|
| Разрешено | буквы, цифры, / как разделитель namespace |
| Запрещено | {}()\@: и .. |
| Путь файла | {baseDir}/{key}.cache |
| Envelope | JSON { "e": expiryUnix|null, "f": "j"|"s", "v": value } |
Формат j — JSON-значение; s — serialize + base64 для не-JSON данных.
DevCraft Admin
В DevCraft Admin CacheControl — тонкий фасад: setCache($type, $name, $data) → ключ {type}/{name} → FileCachePool. Для нового кода предпочтителен CacheControl::pool().