ReactPHP-cache 使用文档(中文翻译)

Cache 组件

为ReactPHP提供的Async和基于Promise的缓存接口。
缓存组件提供了一个基于Promise的CacheInterface和一个内存中的ArrayCache来实现它。
这允许使用者对接口输入提示,并允许第三方提供替代实现。

用法

CacheInterface

CacheInterface定义组件的主要接口。这允许使用者对接口输入提示,并允许第三方提供代替实现。

get()

get(string $key, mixed $default = null): PromiseInterface方法可以从缓存中取回一个项目(值)。
当成功时,这个方法会返回缓存值,当项目不存在或者发生错误时,这个方法会返回$default的值。当然,一个过期的项目(一旦生存时间过期)会被缓存丢弃。

$cache->get('foo')->then('var_dump')

这个例子获取了foo的值,然后把这个值提供给var_dump方法。你也可以用任何promises提供的方法。

set()

set(string $key,mixed $value,?float $ttl = null): PromiseInterface方法可以存储一个项目到缓存中。
当执行成功时,它会返回true,当发生错误时,它会返回false。如果缓存实例必须通过网络存储,那可能需要一点时间执行。
可选参数$ttl可以为缓存项目设置最大生存时间(秒),若这个参数未设置或者设为null,那这个项目将会一直存储在这个缓存中(缓存实例最大支持时间)。
如果试图访问过期的缓存项目,结果会丢失,请参阅get()

$cache->set('foo', 'bar', 60);

这个例子设置了一个键为foo值为bar的缓存项目,如果这个项目(键为foo)已存在,它将被新值覆盖。

delete()

从缓存中删除一个项目.
当执行成功时,它会返回true,当发生错误时,它会返回false。当在缓存中没有找到键为$key的项目,它也会返回true。如果缓存实例必须通过网络存储,那可能需要一点时间执行。

$cache->delete('foo');

这个例子最终删除了键为foo的缓存项目。和set()一样,这可能不会立即发生(删除动作),它会返回一个承诺(promise),以提供是否从缓存中删除项的凭证。

ArrayCache

ArryaCache提供一个CacheInterface的内存实例。

$cache = new ArrayCache();
$cache->set('foo', 'bar');

它的构造函数接受一个可选的参数int $limit以限制LRU缓存的最大条数。如果你添加超过限制条数的缓存进入这个实例,它将自动移除最近最少使用的LRU缓存。
必须这个例子,这断代码将会覆盖掉第一个值,最终缓存实例中只会存放最近两个值。

$cache = new ArrayCache(2);

$cache->set('foo', '1');
$cache->set('bar', '2');
$cache->set('baz', '3');

常用用法

fallback get

缓存的一个常见用例是尝试获取缓存的值,如果没有找到,则作为回退从原始数据源检索该值。例子如下:

$cache
    ->get('foo')
    ->then(function ($result) {
        if ($result === null) {
            return getFooFromDb();
        }
        
        return $result;
    })
    ->then('var_dump');

首先尝试检索foo的值,当返回值为null时,被注册的回调函数getFooFromDb将会被执行。如果查询的项目在缓存中不存在,getFooFromDb(可以再任意PHP中被调用)将会被执行。

getFooFromDb可以通过从数据库(或任何其他数据源)返回对实际值的承诺来处理丢失的键,因此,该链将正确地回调,并在两种情况下提供值。

Fallback get and set

扩展一个get的fallback实例,通常,你从一个数据源中获取一个值后会想把它设置到缓存中去。

$cache
    ->get('foo')
    ->then(function ($result) {
        if ($result === null) {
            return $this->getAndCacheFooFromDb();
        }
        
        return $result;
    })
    ->then('var_dump');

public function getAndCacheFooFromDb()
{
    return $this->db
        ->get('foo')
        ->then(array($this, 'cacheFooFromDb'));
}

public function cacheFooFromDb($foo)
{
    $this->cache->set('foo', $foo);

    return $foo;
}

通过使用链接,如果从数据库中获取值,您可以很容易地有条件地缓存该值。

安装

推荐使用composer安装这个库。
这将安装最新版本:

$ composer require react/cache:^0.5.0

有关版本升级的详细信息,请参阅变更日志。
这个项目的目标是在任何平台上运行,不需要任何PHP扩展,支持PHP5.3到PHP7+和HHVM版本。极力推荐在项目中使用PHP7+版本。
#Tests
要运行测试,你首先需要复制这个repo,然后通过composer安装所有依赖:

$ composer install

运行测试,到项目根目录然后运行:

$ php vendor/bin/phpunit

License

MIT,查看协议文件

猜你喜欢

转载自blog.csdn.net/zeroking_vip/article/details/82895248