fi1a / cache
PHP 缓存库
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[]