please / cache
2.0.1
2024-04-16 12:12 UTC
Requires
- php: ^8.1
README
一个用于缓存PHP >8.1值简单且原始的库。
安装
composer require please/cache
示例
您可以在这里找到使用示例。
驱动器
可用的驱动器
文件系统
此驱动器使用文件系统来存储缓存。
use Please\Cache\Cache; use Please\Cache\Drivers\Filesystem; $cache = new Cache(new Filesystem); $cache->set('foo', 'bar'); $cache->get('foo'); // bar
您可以提供特定的参数。
use Please\Cache\Cache; use Please\Cache\Drivers\Filesystem; $driver = new Filesystem(folder: '/path/to/folder', prefix: 'data'); $cache = new Cache($driver); $cache->set('foo', fn () => ['bar']); $cache->get('foo'); // ['bar']
内存
此驱动器使用内存来存储缓存。
警告
脚本完成后,内存将被清除。
use Please\Cache\Cache; use Please\Cache\Drivers\Memory; $cache = new Cache(new Memory); $anotherCacheInstance = new Cache(new Memory);
默认情况下,Memory驱动器内部创建缓存。
use Please\Cache\Cache; $cache = new Cache;
会话
此驱动器使用 $_SESSION
来存储缓存。
use Please\Cache\Cache; use Please\Cache\Drivers\Session; $cache = new Cache(new Session);
您可以通过键传递要存储的缓存。
use Please\Cache\Cache; use Please\Cache\Drivers\Session; $apiCache = new Cache(new Session('_api')); $imageCache = new Cache(new Session('_images'));
缓存
您可以根据需要创建尽可能多的缓存实例。
use Please\Cache\Cache; use Please\Cache\Drivers\Session; use Please\Cache\Drivers\Filesystem; $videoCache = new Cache(new Session('your unique key')); $imageCache = new Cache(new Filesystem('/path/to/images'));
默认情况下,使用原生PHP函数 serialize()
和 unserialize()
进行序列化。
如果需要,您可以创建并传递自己的序列化器,例如序列化闭包、类等。
use Please\Cache\Cache; use Please\Cache\Drivers\Filesystem; use Please\Cache\Serializers\Contracts\Serializer; class JsonSerializer implements Serializer { public function serialize(mixed $value): string { return json_encode($value); } public function unserialize(mixed $value): mixed { return json_decode($value, true); } } $cache = new Cache(new Filesystem, new JsonSerializer);
方法
set()
将值持久化到缓存中,由一个键唯一引用,可选的过期TTL时间。
$cache->set(key: 'foo', value: 'bar', ttl: 3600);
您可以将TTL值作为字符串传递,如 strtotime()
函数。
$cache->set('foo', ['bar', 'baz'], '1 day'); // the example above is equivalent to this code $ttl = strtotime('1 day') - time(); $cache->set('foo', 'bar', $ttl);
get()
从缓存中获取值。
$cache->get(key: 'foo', default: 'baz');
传递默认值作为 Closure
,如果键未找到,则将懒惰地执行它。
$cache->get('foo', fn () => 'baz');
has()
确定一个项是否存在于缓存中。
$cache->set('foo', 'bar'); $cache->has('foo'); // true $cache->has('baz'); // false
clear()
擦除所有缓存。
注意
$cacheInstance->clear()
方法仅对调用它的实例有效。
$cache->set('foo1', 'bar1')->has('foo1'); // true $cache->set('foo2', 'bar2')->has('foo2'); // true $cache->clear(); $cache->has('foo1'); // false $cache->has('foo2'); // false
forget()
通过键删除缓存。
$cache->set('foo', 'bar')->has('foo'); // true $cache->forget('foo'); $cache->has('foo'); // false
pluck()
通过键从缓存中删除并返回一个项。
$cache->set('foo', 'bar')->has('foo'); // true $cache->pluck('foo'); // bar $cache->has('foo'); // false
through()
如果闭包未被缓存,则执行它,否则返回闭包执行的结果。
此方法使用 ClosureHash
。
注意
闭包必须返回一个值,该值可以通过您选择的 序列化器 序列化。
$closure = function () { return mt_rand(); }; $cache->through($closure); $cache->through($closure); // returns cached result of closure execution
许可证
开源软件,许可协议为 MIT许可协议。