lingualeo/php-cache

LinguaLeo 缓存库

0.9.0 2017-04-22 00:23 UTC

README

PHP-Cache 是一个用于简化您与不同缓存存储引擎工作的库。目前该库处于快速发展阶段,因此 API 未来可能会发生变化。

使用 Redis 的示例

$redis = new \Redis();
$redis->connect('127.0.0.1');
$cache = new RedisCache($redis);

$cache->set('test', 'data'); //write 'data' by key 'test'
$cache->get('test'); //returns 'data'

还支持类似 CAS 的原子操作(创建更新)。例如

$modifier = function (&$data) {
    $data = 'value';
};
$result = $this->cache->create('test', $modifier);

数据 代表存储中已存在信息的引用。您可以在可调用的内部修改或完全替换它。

如果您在调用 创建 之前其他客户端更改了 数据,您将收到一个 AtomicViolationException。在您的客户端代码中,您可以捕获此异常并重试操作。

创建更新 方法的区别在于,如果存储中不包含指定的键,则 更新 将不会做任何事情。

装饰器

目前该库仅提供了一个额外的 HotCacheDecorator,这在高负载环境下非常有用:它只是将所有缓存数据存储(和修改)在内存数组中。因此,如果您调用 get 一次,则后续的所有调用都只能通过热缓存提供,而不需要向存储服务器发送任何请求。

要启用热缓存,只需将任何 CacheProvider 对象的创建用装饰器包装

$redis = new \Redis();
$redis->connect('127.0.0.1');
$cache = new HotCacheDecorator(new RedisCache($redis));

缓存键生成

库提供了使用 CacheProvidergenerateCacheKey 方法生成缓存键的简单机制。

$key = CacheProvider::generateCacheKey('arg1', 'arg2'); //cache:arg1:arg2

您可以向此方法传递任意数量的参数(> 0),以获取一个全新的缓存键。此外,您可以将类名作为第一个参数传递,如果该类包含常量字段 VERSION,则其值将与其他 generateCacheKey 参数混合。

class Test {
    const VERSION = 2;
}
...
$key = CacheProvider::generateCacheKey('Test', 'arg1', 'arg2'); //cache:Test:arg1:arg2:2

当您与 ORM 模型一起工作,并希望缓存对象的多个版本而无需在单个模型上做出一些更改后删除所有缓存数据时,此行为非常有用。

测试

设置 VagrantVirtualbox

vagrant up
phpunit