Покритикуйте моё первое "кэширование"

Духовность™

Продвинутый новичок
Покритикуйте моё первое "кэширование"

Я придумал такое решение - я кэширую блоки шаблона. Ну, например, список анонсов на главной + тема дня раньше каждый раз генерировались, делались запросы к субд, а теперь так сделано:

В шаблоне:

PHP:
<html> .. Тема дня: <?=cache::get('theme_of_day')?> <br /> 
См. также: <?=cache::get('index')?> ..</html>
В админке при добавлении/редактировании и при иных действиях со статьями:

PHP:
// ....
cache::make('theme_of_day');
cache::make('index');
Что делают эти статические методы?

В шаблоне метод get возвращает строку - содержимое кэша. Если кэша не существует, то он создается.

В программе метод make просто создает кэш - метод получает данные, вызывает шаблон, переданный в параметре метода, генерирует контент и сохраняет в папочку cache файлик с соответствующим именем. Таким образом в /cache/ будет создано 2 файла: theme_of_day и index

Таким образом я сохраняю редкоизменяемые вещи и не терзаю базу.

Вот. это правильно?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
м. А как у тебя кеш регенерирует сам себя? Делает запросы в БД? Побоку модели? =)

Имхо, кэш должен быть пассивным.
Но, это имхо.
 

whirlwind

TDD infected, paranoid
А почему не сделать кеширование на уровне контроллеров? Как минимум для того, что бы мух с котлетами не мешать.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
почему не сделать кеширование на уровне контроллеров?
это как раз то, что я говорил о пассивном кеше. Кеш умеет 3 вещи — сохранить, отдать, и проверить на тухлость.
И когда ты контроллером узнаешь — надо отобразить тему дня, он спрашивает кеш, есть ли у него в кеше непротухшая тема дня? если есть, то кеш ее отдает. Если ее нет, контроллер ее узнает, и кладет в кеш. Потом отдает ее отображению.
 

Духовность™

Продвинутый новичок
он спрашивает кеш, есть ли у него в кеше непротухшая тема дня? если есть, то кеш ее отдает. Если ее нет, контроллер ее узнает, и кладет в кеш. Потом отдает ее отображению.
откуда вообще берется термин "протухший"? почему нельзя сразу сделать актуальный кэш, сразу, после момента каких-либо изменений?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
кто сказал что нельзя? Можно. Я же говорю — имхо.
Просто не все изменения могут зависеть от твоей программы. Да и обычно кеш — это оптимизация существующего взаимодействия — грубо говоря, убери кеш — и все все равно продолжит работать. А у тебя нельзя убрать кеш. Нельзя им управлять. Он как захочет, так себя и будет вести. Имхо, ИМХО! кешем должно пользоваться приложение, кеш не должен быть сам по себе.
 

HraKK

Мудак
Команда форума
triumvirat
Скачай и изучи Zend_Cache File adapter
Только у них есть 1 подводный камень. Думаю поймёшь сам)
 

korchasa

LIMB infected
Автор оригинала: флоппик
это как раз то, что я говорил о пассивном кеше. Кеш умеет 3 вещи — сохранить, отдать, и проверить на тухлость.
И когда ты контроллером узнаешь — надо отобразить тему дня, он спрашивает кеш, есть ли у него в кеше непротухшая тема дня? если есть, то кеш ее отдает. Если ее нет, контроллер ее узнает, и кладет в кеш. Потом отдает ее отображению.
Проверить на тухлость здесь не нужно ;)

Пассивные кэши хороши только когда данные могут меняться в одном только месте.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Пассивные кэши хороши только когда данные могут меняться в одном только месте.
Пассивные кеши могут менятся в любом количестве мест. Не вижу, что может этому препятствовать? Аргументируйте, пожалуйста.
 

Garret

Кто здесь?
Мм, весело, если по каким то причинам кэш потерялся, то пользователи будут лицезреть пустую страничку пока админ не обновит страницу.

ИМХО - бред.
 

pilot911

Новичок
Автор оригинала: Garret
Мм, весело, если по каким то причинам кэш потерялся, то пользователи будут лицезреть пустую страничку пока админ не обновит страницу.

ИМХО - бред.
не бред, идея имеет право на существование

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

кэш в большинстве случаев должен строиться по запросу
 

HraKK

Мудак
Команда форума
Спор умноконечников с тупоконечниками.
 

ustas

Элекомист №1
HraKK
а какой подводный камень? поподробней с этого места
 

HraKK

Мудак
Команда форума
ustas
заюзай этот кеш например на 10.000 продуктов :)
 

korchasa

LIMB infected
Автор оригинала: флоппик
Пассивные кеши могут менятся в любом количестве мест. Не вижу, что может этому препятствовать? Аргументируйте, пожалуйста.
Логику по заполнению кэша дублировать плохо? Тогда вводим какой-нибудь dao или service, который умеет отдавать данные и заполнять их, если пусто. И получаем прозрачный кэш :)
 
Сверху