Intereting Posts

CakePHP Cache :: write () Могут ли ключи группироваться по модели?

Рассмотрим следующее:

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

Можно ли удалить группу ключей из кэша?

Например, если бы я хотел очистить все кэшированные данные для «Модели», но оставить «AnotherModel» в кеше, я хотел бы использовать следующее;

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

Возможно ли такое достижение в CakePHP 1.3.x?

Благодаря!

Для тех, кто просто поделился этой проблемой (как и я), 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 hook:

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

Вы можете настроить другую конфигурацию кэша для каждой модели, чтобы каждая конфигурация имела другой путь.
http://book.cakephp.org/view/1515/Cache-config

Я не вижу способа полностью удалить все данные с помощью класса кэша, но вы можете написать свою собственную функцию, чтобы удалить все данные (кэшированные файлы) из определенного каталога кеша для конкретной модели. Используя различные файлы конфигурации для разных моделей, вы можете изолировать кэшированные данные модели в уникальный каталог для каждой модели, а затем вручную удалить содержимое, когда хотите очистить данные для этой модели.