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

时间:2011-05-03 16:07:38

标签: php caching cakephp

考虑以下事项;

Cache::write('Model.key1' , 'stuff');
Cache::write('AnotherModel.key1' , 'stuff');
Cache::write('Model.key2' , 'stuff');

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

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

Cache::delete('Model.*');

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

谢谢!

2 个答案:

答案 0 :(得分: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'],
));

模型afterSave挂钩:

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

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

// 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);
}

答案 1 :(得分:0)

您可以为每个模型设置不同的缓存配置,以使每个配置具有不同的路径 http://book.cakephp.org/view/1515/Cache-config

我没有看到使用缓存类完全删除所有数据的方法,但您可以编写自己的函数来删除特定模型的特定缓存目录中的所有数据(缓存文件)。通过为不同的模型使用不同的配置文件,您可以将模型的缓存数据隔离到每个模型的唯一目录中,然后在要刷新该模型的数据时手动删除内容。