CakePHP Cache :: write()键可以按模型分组吗?

rob*_*vey 2 php caching cakephp

考虑以下;

Cache::write('Model.key1' , 'stuff');
Cache::write('AnotherModel.key1' , 'stuff');
Cache::write('Model.key2' , 'stuff');
Run Code Online (Sandbox Code Playgroud)

我可以从缓存中删除一组密钥吗?

例如,如果我想清除"Model"的所有缓存数据,但在缓存中留下"AnotherModel",我想使用以下内容;

Cache::delete('Model.*');
Run Code Online (Sandbox Code Playgroud)

可以在CakePHP 1.3.x中实现这种功能吗?

谢谢!

Sim*_*ast 6

对于那些只是谷歌搜索这个问题(就像我一样),Cake 2.2现在支持这种功能(无需为每个'组'创建单独的缓存配置).

这里有一点解释,虽然它缺少一些细节:http:
//book.cakephp.org/2.0/en/core-libraries/caching.html#using-groups

但这就是我在我的应用程序中所做的,它似乎运行良好.;-)

/app/Config/core.php

Cache::config('default', array(
    'engine' => $engine,
    ...
    'groups' => ['navigation'],
));
Run Code Online (Sandbox Code Playgroud)

模型afterSave钩子:

function afterSave($created) {
    // This deletes all keys beginning with 'navigation'
    Cache::clearGroup('navigation');
    parent::afterSave($created);
}
Run Code Online (Sandbox Code Playgroud)

然后在我的控制器/模型中需要昂贵的查询......

// We create a unique key based on parameters passed in
$cacheKey = "navigation.$sitemapId.$levelsDeep.$rootPageId";
$nav = Cache::read($cacheKey);
if (!$nav) {
    $nav = $this->recursiveFind(
        'ChildPage',
        ['page_id' => $rootPageId],
        $levelsDeep
    );
    Cache::write($cacheKey, $nav);
}
Run Code Online (Sandbox Code Playgroud)