密码/缓存代理

用于任何类公共方法的装饰器,以代理请求到缓存

v1.1 2016-09-20 12:32 UTC

This package is auto-updated.

Last update: 2024-09-13 22:59:05 UTC


README

Build Status

关于库

将任何函数的调用代理到缓存以检索数据。

安装

运行命令

composer require mima/cache-proxy

在composer.json中添加依赖项

{
    "require": {
        "mima/cache-proxy": "~1.0"
    }
}

使用

更新缓存并检索数据

创建CacheProxy\Proxy类的新实例

use CacheProxy\Proxy;
use CacheProxy\Adapter\DoctrinCacheAdapter;

$adapter = new DoctrinCacheAdapter($doctrinCacheInstance);
$cacheProxy = new Proxy($adapter);

适配器应该实现接口CacheProxy\Adapter\CacheAdapterInterface。它用于将接口适配到您框架的缓存。

您可以使用几个预准备的适配器或创建自己的适配器

  • CacheProxy\Adapter\DoctrinCacheAdapter实现用于doctrine缓存
  • CacheProxy\Adapter\YiiCacheAdapter实现用于yii2

直接在代码中使用CacheProxy\Proxy类的实例

use MyNamespace\AnyClass;
use CacheProxy\Target\ProxyTarger;

$object = new AnyClass();
$target = new ProxyTarget([$object, 'anyMethod'], ['arg1', 'arg2']);

$data = $cacheProxy->proxyTarget($target);

或者您可以为您的类创建一个装饰器,并使其依赖于CacheProxy\Proxy

namespace MyNamespace;

use CacheProxy\Proxy

class AnyDecorator
{
    /**
     * @var AnyClass
     */
    protected $class;
    /**
     * @var Proxy
     */
    protected $proxy;

    public function __construct(AnyClass $class, Proxy $cacheProxy)
    {
        $this->class = $class;
        $this->cacheProxy = $proxy;
    }

    public function anyMethod($arg1, $arg2)
    {
        $target = new ProxyTarget([$this->class, 'anyMethod'], func_get_args());

        return $this->cacheProxy->proxyTarget($target);
    }
}

CacheProxy\Proxy类中生成运行时数据的缓存键。如果您想为缓存键指定任何后缀,请将第二个参数传递给CacheProxy\Proxy::proxyTarget方法。

$cityId = 1;
$cacheProxy->proxyTarget($target, $cityId);

要设置缓存中存储数据的时间,请将第三个参数传递给CacheProxy\Proxy::proxyTarget方法。

$ttl = 3600;
$cacheProxy->proxyTarget($target, null, $ttl);

从缓存中清除数据

如果您想删除所有缓存数据,请按照以下步骤操作

// this code update cache ad return data
$key = md5('any-key');
$cacheProxy->proxyTarget($target, null, $ttl);

// this code flush all data from cache by target and key
$cacheProxy->flushTarget($target, $key);