CakePHP Cache :: write () Можно ли сгруппировать ключи по модели? - PullRequest
2 голосов
/ 03 мая 2011

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

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 ]

6 голосов
/ 22 февраля 2013

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...