Сброс кеша при обновлении
Closed this issue · 3 comments
Есть у меня модель Base для объектов (отель, пансионат...) и Service (парк, бассейн, корт...) и связующая таблица {{%base_to_service}}.
Связь
public function getServices()
{
return $this->hasMany(
Service::className(),
['id' => 'service_id']
)->viaTable(
'{{%base_to_service}}',
['base_id' => 'id']
);
}
Вывожу список объектов вместе с сервисами. Чтобы не дергать каждый раз сервисы - их кеширую через виджет.
Теперь, если изменить количество привязанных к объекту сервисов в админке, нужно инвалидировать кеш.
Как это лучше сделать?
Я не понимаю какое это отношение имеет к поведению, ну да ладно.
- Я бы ничего не кешировал без острой надобности, тем более в админке. Кеширование всегда дополнительные сложности.
- Раз уж кешируешь, то по событию изменения любой модели из списка инвалидируй кеш. Прямо в экшене сохранения изменений. Может поможет тегориваный кеш, в офф доке yii2 описано.
Но еще раз подчеркну - я бы ничего не кешировал без острой надобности. Может лучше стоит индексов добавить в табличку сервисов чтобы БД было проще их отдавать?
Имеет ).
Кеширую я на фронте. А в админке меняю привязки сервисов к объектув {{%base_to_service}}. Привязки эти обрабатывает поведение.
Кешировать приходится, т.к. выводится список объектов (150штук) с сервисами. Даже если join - ить, , все равно описание и каринки достаются через доп. запрос. Т.е. 150 лишних запросов
Я предполагал так - В настройках updater
добавить параметр cashKey. Если он задан - тогда по нему сбрасывать кеш, если в процессе работы поведения изменилось количество привязанных ссервисов к объекту.
А жадную загрузку используешь? Если ничего не помогает - тогда кеширование, либо по времени либо по любому другому признаку.
В зону ответственности поведения не входит инвалидация кеша.
Но если это не критично, можно и свой Updater напилить и заложить это в него)