please/cache

2.0.1 2024-04-16 12:12 UTC

This package is auto-updated.

Last update: 2024-09-16 13:00:33 UTC


README

一个用于缓存PHP >8.1值简单且原始的库。

安装

composer require please/cache

示例

您可以在这里找到使用示例。

驱动器

可用的驱动器

  • 文件系统
    • 此驱动器使用文件系统来存储缓存。
  • 内存
    • 此驱动器使用内存来存储缓存。
  • 会话
    • 此驱动器使用 $_SESSION 来存储缓存。

文件系统

此驱动器使用文件系统来存储缓存。

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许可协议