Кеширование

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
nothing
Сообщения: 9
Зарегистрирован: 2009.09.06, 09:18

Кеширование

Сообщение nothing »

Доброго всем времени суток.
К своей системе бложеков мне очень захотелось прикрутить кеширование. Так как у меня мало опыта работы с кешем, то я был довольно озадачен реализацией оного в Yii. Я не нашел тегов (Плохо искал?), зато нашел зависимости, пользоваться которыми мне пока не удалось :)
Итак, суть такова (для примера): есть куча записей, разбитые страницами. Выборка из базы ведется также, естественно, постранично (LIMIT, OFFSET). То есть, для каждой страницы с записями есть свой файл (при CFileCache) с кешем. Вопрос возникает при добавлении/удалении записи: как удалить одним махом кеш для всех страниц?
В общем буду очень признателен за ответы, туториалы, критику (может я вообще, к чертям собачьим, все неправильно делаю).
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Кеширование

Сообщение slavcodev »

А зачем удалять кеш всех страниц? Из-за pagination?
Если да то вы скорее всего упустили вот эту страницу из документации.
Жду Yii 3!
Аватара пользователя
Caveman
Сообщения: 152
Зарегистрирован: 2009.04.04, 20:56
Откуда: Москва
Контактная информация:

Re: Кеширование

Сообщение Caveman »

Одним махом кэш удаляется так:

Код: Выделить всё

$cache=Yii::app()->cache;
$cache->flush(); 
nothing
Сообщения: 9
Зарегистрирован: 2009.09.06, 09:18

Re: Кеширование

Сообщение nothing »

mc-bear писал(а):А зачем удалять кеш всех страниц? Из-за pagination?
Если да то вы скорее всего упустили вот эту страницу из документации.
Спасибо, почитал. Но дело в том, что я хочу ограничиться только кешированием данных.
Caveman писал(а):Одним махом кэш удаляется так:
Да, но оно удаляет абсолютно весь кеш. Я бы хотел, чтобы оно удаляло только зависимый кеш.

Все еще пытаюсь понять систему Dependencies. Официальная документация, как всегда, не отличилась щедростью в освещении этого вопроса :)
Аватара пользователя
Caveman
Сообщения: 152
Зарегистрирован: 2009.04.04, 20:56
Откуда: Москва
Контактная информация:

Re: Кеширование

Сообщение Caveman »

Хм...
Пара вариантов:
- вести список зависимых кэшированных данных;
- разобраться с событиями, чтобы было более феншуйно и автоматизированней.
nothing
Сообщения: 9
Зарегистрирован: 2009.09.06, 09:18

Re: Кеширование

Сообщение nothing »

Слегка разобрался с Dependencies.
Подходит тут CGlobalStateCacheDependency. Функция setGlobalState пишет значения разных состояний в таинственный файл runtime/state.bin. А класс кеша проверяет то самое событие.
Вот только не понимаю зачем разработчик засунул проверку этих Dependencies в фунцию set? Мне кажется, логичнее было бы все-таки в get. Хотя хз, может я чего-то не понимаю ;)
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Кеширование

Сообщение Ekstazi »

Вопрос сюда же по теме, как создавать цепочки зависимостей ? CChainedCacheDependency не позволяет, есть гетер, а сетера нету.
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Кеширование

Сообщение Ekstazi »

Может баг репорт написать ?
Аватара пользователя
Caveman
Сообщения: 152
Зарегистрирован: 2009.04.04, 20:56
Откуда: Москва
Контактная информация:

Re: Кеширование

Сообщение Caveman »

Я не уверен в своих суждениях, но мысль такая:
Создаем новую цепочку, далее запрашиваем в некую переменную список зависимостей. При первом запросе создастся этот самый список (объект!).
Поэтому в нашей переменной мы имеем ссылку на объект (который можно использовать как массив), являющийся параметром цепочки. Далее просто в нашу переменную-объект-массив добавляем зависимости.
Что-то типа такого:

Код: Выделить всё

$chain = new CChainedCacheDependency;
$dependencies = $chain->dependencies;
$dependencies[] = new CDirectoryCacheDependency;
$dependencies[] = new CDbCacheDependency;
...
Yii::app()->cache->set($some_variable, $value, 30, $chain);
 
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

Re: Кеширование

Сообщение kukuruku »

не могу разобраться с такой вещью

допустим на странице выводится поле из ячейки таблицы. сам запрос идет в контроллере
можно закешировать запрос на получение ячейки
или же закешировать область на странице, где выводим ячейку, но ведь запрос будет все равно отрабатываться в самом контроллере

получается надо кешировать сразу в двух местах?
TM123
Сообщения: 608
Зарегистрирован: 2011.06.09, 11:18

Re: Кеширование

Сообщение TM123 »

Кэшируются запросы, соответственно если вы включаете кэширование то будут кэшироваться запросы, если вы для отображения ячейки при выборке данных для нее укажите кэшировать, то запрос на ее выборку будет кэшировать не важно где он выполняется, главное чтобы он был из всех мест одинаковым, ну или закэшируется столько раз, сколько его вариантов у вас есть.
Ответить