Yii: тегирование кеша
21 апреля 2011
Простая, но эффективная реализация тегирования кеша для Yii, позволяющая делать так:
// Добавление записи с тегами teg1 и tag2 Yii::app()->cache->set($key, $value, 0, new Tags('tag1', 'tag2')); // Очистка кеша по тегу tag2 Yii::app()->cache->clear('tag2');
Комментарии RSS по email OK
Да то что?! Вот обрадовал старика. Реально нужная вещь! Спасибо.
Ой, а я уж подумал, что это прямо в yii уже сделали.
Ну, пока запросов на это дело, насколько знаю, не поступало. Как будут те, кому оно действительно необходимо — думаю, сделаем.
Те, кому это действительно необходимо, молча дописывают данный функционал. Вещь очень удобная... особенно привыкнув к ней в Зенде.
porter, вот от такой молчанки и приходится потом многое дописывать :)
Другой вопрос - каждый тег это дополнительный запрос к мемкешу, так что слишком много их навешивать тоже не стоит...
А так да, фича полезная.
Привет всем. Кто то тестировал работу данной реализации? Кстати, к разработчикам Yii: большая просьба реализовать функционал тегирования кеша, если возможно. Спасибо)
С запросами функционала лучше сразу в трекер проекта.
У меня два вопроса:
Спасибо за ответ. 2ой вопрос: к какой модели добавить Behavior? Добавляю в siteController - beforeaction: Yii::app()->cache->attachBehavior("TaggingBehavior",new TaggingBehavior()); Работает через раз.
Скажите, а без мемкеша здесь никак не обойтись? На файлах такое сделать не получиться?
Получится. Код, который там приведён, должен работать с любым хранилищем.
Пишу в виджете
Yii::app()->cache->set($id, $bixbox, 0, new Tags('category10', 'category13', 'category16'));
В переменную пихаю уже отрендереный блок. Передаю значения ID категорий с которых беруться новости.
При редактировании категории в afterSave()
пишу Yii::app()->cache->clear('category'.$this->id);
кеш не удаляеться
Подрубил я это всё добро вот так вот :
'cache'=>array( 'class'=>'system.caching.CFileCache', 'behaviors' => array( 'clear'=>array( 'class'=>'application.behaviors.TaggingBehavior' ) ) ),
Sam, ты используешь это в своих проектах ?
Нет не использую, но кто пользовался вроде говорили что работает.
Очень странно оно работает.
Если вызвать Yii::app()->cache->clear('tag'); то Yii::app()->cache->get(...) для удаленных записей все равно их возвращает, и перестает их "видеть" только при следующем хите (после обновления страницы)....
ЗЫ Пробую файловое кэширование.
Изменил проверку timestamp в Tags - теперь порядок. Вот бы оно еще устаревшие файлы кэша удаляло, было бы совсем здорово...