fi1a / cache
PHP библиотека реализующая кэш (cache)
Requires
- php: ^7.3 || ^8
- fi1a/filesystem: ^1.0
- fi1a/hydrator: ^1.0
Requires (Dev)
- captainhook/captainhook: ^5.4
- phpunit/phpunit: ^9.3
- slevomat/coding-standard: ^6.3
- squizlabs/php_codesniffer: ^3.5
- vimeo/psalm: ^4.3
README
PHP библиотека предоставляет классы и методы для реализации кэширования. Имеются адаптеры для различных механизмов кэширования.
Доступные адаптеры:
Fi1a\Cache\Adapters\FilesystemAdapter
- адаптер кэширования в файловой системе;Fi1a\Cache\Adapters\MemoryAdapter
- адаптер кэширования в памяти;Fi1a\Cache\Adapters\NullAdapter
- адаптер null.
Установка
Установить этот пакет можно как зависимость, используя Composer.
composer require fi1a/cache
Доступ к значениям и сохранение кэша
Для доступа к значениям кэша используется класс, реализующий интерфейс Fi1a\Cache\CacheItemPoolInterface
.
Он представляет собой логический репозиторий для всех значений кэша.
Все кэшируемые элементы извлекаются как объекты Fi1a\Cache\CacheItemInterface
.
use Fi1a\Cache\Adapters\FilesystemAdapter; use Fi1a\Cache\CacheItemPool; use Fi1a\Filesystem\Adapters\LocalAdapter; use Fi1a\Filesystem\Filesystem; $cachePath = __DIR__ . '/runtime/cache'; if (!is_dir($cachePath)) { mkdir($cachePath, 0775, true); } $filesystem = new Filesystem(new LocalAdapter($cachePath)); $adapter = new FilesystemAdapter($filesystem->factoryFolder($cachePath)); $cache = new CacheItemPool($adapter, 'your/namespace'); $item = $cache->getItem('cache-key'); // Fi1a\Cache\CacheItemInterface $item->get(); // null $item->set('some-value'); $item->expiresAfter(10); // время жизни 10 секунд $cache->save($item); $item = $cache->getItem('cache-key'); // Fi1a\Cache\CacheItemInterface $item->get(); // 'some-value'
Аргументы конструктора Fi1a\Cache\CacheItemPoolInterface
:
Методы Fi1a\Cache\CacheItemPoolInterface
реализующего пулл элементов кэша:
Значения кэша
Fi1a\Cache\CacheItemInterface
определяет элемент, используемый в системе кэширования.
Объект реализующий интерфейс Fi1a\Cache\CacheItemInterface
создается классом Fi1a\Cache\CacheItemPoolInterface
,
который отвечает за все необходимые настройки, а также связывает объект с уникальным ключом.
Получить один элемент кэша:
Если нет элемента кэша с ключом 'cache-key', будет возвращен новый элемент кэша.
use Fi1a\Cache\Adapters\FilesystemAdapter; use Fi1a\Cache\CacheItemPool; use Fi1a\Filesystem\Adapters\LocalAdapter; use Fi1a\Filesystem\Filesystem; $cachePath = __DIR__ . '/runtime/cache'; if (!is_dir($cachePath)) { mkdir($cachePath, 0775, true); } $filesystem = new Filesystem(new LocalAdapter($cachePath)); $adapter = new FilesystemAdapter($filesystem->factoryFolder($cachePath)); $cache = new CacheItemPool($adapter, 'your/namespace'); $item = $cache->getItem('cache-key'); // Fi1a\Cache\CacheItemInterface
Получить несколько элементов кэша:
В случае отсутствия какого либо элемента кэша с определенным ключом, будет возвращен новый элемент кэша.
use Fi1a\Cache\Adapters\FilesystemAdapter; use Fi1a\Cache\CacheItemPool; use Fi1a\Filesystem\Adapters\LocalAdapter; use Fi1a\Filesystem\Filesystem; $cachePath = __DIR__ . '/runtime/cache'; if (!is_dir($cachePath)) { mkdir($cachePath, 0775, true); } $filesystem = new Filesystem(new LocalAdapter($cachePath)); $adapter = new FilesystemAdapter($filesystem->factoryFolder($cachePath)); $cache = new CacheItemPool($adapter, 'your/namespace'); $items = $cache->getItems([['cache-key-1'], ['cache-key-2', 'hash2']]); // Fi1a\Cache\CacheItemInterface[]
Методы интерфейса Fi1a\Cache\CacheItemInterface
реализующего элемент кэша:
Адаптер кэширования в файловой системе
Для использования кэширования в файловой системе, следует передать объект Fi1a\Cache\Adapters\FilesystemAdapter
в конструктор класса Fi1a\Cache\CacheItemPool
:
use Fi1a\Cache\Adapters\FilesystemAdapter; use Fi1a\Cache\CacheItemPool; $adapter = new FilesystemAdapter(__DIR__ . '/runtime/cache'); $cache = new CacheItemPool($adapter, 'your/namespace');
Класс Fi1a\Cache\Adapters\FilesystemAdapter
в качесве аргумента, конструктор принимает путь до папки, где будут
расположены файлы кэша.
Адаптер кэширования в памяти
Иногда нужно хранить кэш только на момент выполнения, а по завершению его удалять. Для этого можно использовать
адаптер кэширования в памяти Fi1a\Cache\Adapters\MemoryAdapter
.
use Fi1a\Cache\Adapters\MemoryAdapter; use Fi1a\Cache\CacheItemPool; $adapter = new MemoryAdapter(); $cache = new CacheItemPool($adapter, 'your/namespace'); $items = $cache->getItems([['cache-key-1'], ['cache-key-2', 'hash2']]); // Fi1a\Cache\CacheItemInterface[]
Адаптер null
Адаптер null представляет собой нейтральное, «бездейственное» поведение. Можно использовать в логике, когда кэширование поддерживается, но оно на данный момент не нужно.
use Fi1a\Cache\Adapters\NullAdapter; use Fi1a\Cache\CacheItemPool; $adapter = new NullAdapter(); $cache = new CacheItemPool($adapter, 'your/namespace'); $items = $cache->getItems([['cache-key-1'], ['cache-key-2', 'hash2']]); // Fi1a\Cache\CacheItemInterface[]