<rmcreative>

RSS

Yii: тегирование кеша

21 апреля 2011

Простая, но эффективная реализация тегирования кеша для Yii, позволяющая делать так:

// Добавление записи с тегами teg1 и tag2
Yii::app()->cache->set($key, $value, 0, new Tags('tag1', 'tag2'));
 
// Очистка кеша по тегу tag2
Yii::app()->cache->clear('tag2');

Читаем

Комментарии RSS

  1. №4467
    rosko
    rosko 21 апр. 2011 г., 3:56:45

    Да то что?! Вот обрадовал старика. Реально нужная вещь! Спасибо.

  2. №4468
    rosko
    rosko 21 апр. 2011 г., 3:57:44

    Ой, а я уж подумал, что это прямо в yii уже сделали.

  3. №4473
    Sam
    Sam 21 апр. 2011 г., 16:50:31

    Ну, пока запросов на это дело, насколько знаю, не поступало. Как будут те, кому оно действительно необходимо — думаю, сделаем.

  4. №4477
    porter
    porter 21 апр. 2011 г., 22:07:51

    Те, кому это действительно необходимо, молча дописывают данный функционал. Вещь очень удобная... особенно привыкнув к ней в Зенде.

  5. №4478
    Sam
    Sam 21 апр. 2011 г., 22:46:54

    porter, вот от такой молчанки и приходится потом многое дописывать :)

  6. №4488
    Сергей
    Сергей 24 апр. 2011 г., 2:02:23

    Другой вопрос - каждый тег это дополнительный запрос к мемкешу, так что слишком много их навешивать тоже не стоит...

    А так да, фича полезная.

  7. №5940
    Михаил
    Михаил 21 февр. 2012 г., 13:05:06

    Привет всем. Кто то тестировал работу данной реализации? Кстати, к разработчикам Yii: большая просьба реализовать функционал тегирования кеша, если возможно. Спасибо)

  8. №5942
    Sam
    Sam 21 февр. 2012 г., 17:23:10

    С запросами функционала лучше сразу в трекер проекта.

  9. №6060
    lvil
    lvil 20 марта 2012 г., 13:10:45

    У меня два вопроса:

    1. Возможно ли кэширование SQL запросов?
    2. Как прикрутить Behavior? (Yii не видит метод cache->clear('tag'))
  10. №6064
    Sam
    Sam 21 марта 2012 г., 13:11:15
    1. Да. Описано в руководстве по Yii. К тегированию не имеет отношения.
    2. Вот так.
  11. №6065
    lvil
    lvil 21 марта 2012 г., 19:39:12

    Спасибо за ответ. 2ой вопрос: к какой модели добавить Behavior? Добавляю в siteController - beforeaction: Yii::app()->cache->attachBehavior("TaggingBehavior",new TaggingBehavior()); Работает через раз.

  12. №6394
    Владимир
    Владимир 01 июля 2012 г., 8:07:12

    Скажите, а без мемкеша здесь никак не обойтись? На файлах такое сделать не получиться?

  13. №6396
    Sam
    Sam 01 июля 2012 г., 21:55:57

    Получится. Код, который там приведён, должен работать с любым хранилищем.

  14. №6435
    Владимир
    Владимир 11 июля 2012 г., 19:58:05

    Пишу в виджете

    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, ты используешь это в своих проектах ?

  15. №6436
    Sam
    Sam 11 июля 2012 г., 21:45:59

    Нет не использую, но кто пользовался вроде говорили что работает.

  16. №6815
    Дмитрий
    Дмитрий 06 окт. 2012 г., 17:55:29

    Очень странно оно работает.

    Если вызвать Yii::app()->cache->clear('tag'); то Yii::app()->cache->get(...) для удаленных записей все равно их возвращает, и перестает их "видеть" только при следующем хите (после обновления страницы)....

  17. №6816
    Дмитрий
    Дмитрий 06 окт. 2012 г., 17:56:05

    ЗЫ Пробую файловое кэширование.

  18. №6817
    Дмитрий
    Дмитрий 06 окт. 2012 г., 18:03:29

    Изменил проверку timestamp в Tags - теперь порядок. Вот бы оно еще устаревшие файлы кэша удаляло, было бы совсем здорово...

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.