Для тех, кто просто гуглит эту проблему (как и я), 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);
}