CakePHP 3的动态缓存组

时间:2018-04-11 19:32:24

标签: caching cakephp cakephp-3.x

我用Cakephp 3.5创建了一个多站点应用程序。到目前为止,我对它很满意,但我有一个特别的问题。我想在站点范围内保留某些缓存组。例如,如果我想清除站点1的产品组,则不应清除站点2的产品。

我知道我可以拥有多个配置组,但这对我不起作用,因为网站数量是动态的,可以立即从管理面板创建新网站。

有没有办法扩展缓存引擎?

1 个答案:

答案 0 :(得分:0)

我决定扩展MemcachedEngine,因为我希望能够根据需要动态更改前缀。这对于克隆产品等批量修改非常有用。

protected _key()方法是所有引擎继承的CacheEngine抽象类的成员。

Site-Key正被寻找特定请求标头的中间件添加到应用配置中。

我在评论中修改了ndm建议的前缀。

class PrefixedMemcachedEngine extends MemcachedEngine
{
    private $_initCachePrefix = '';

    public function init(array $config = [])
    {
        $this->_initCachePrefix = $config['prefix'] ?? '';
        return parent::init($config);
    }

    protected function _key($key)
    {
        $this->_config['prefix'] = $this->_initCachePrefix . Configure::read('Site-Key');
        return parent::_key($key);
    }
}