Здравствуй All!Кто-нибудь сталкивался с проблемой в сабже?
Идея такова: чтобы не бергать постоянно базу данных, имеет смысл кешировать уже готовые страницы и выдавать их пользователю.Пример "лента новостей".
Есть страницы
- постраничный список новостей
- список новостей с фильтрами (год, месяц, день), опять же, постраничный
- страница новостиКешировать страницу новости просто при доступе к новости, определяется, есть ли кешированная новость, если нет, то получаем информацию из базы, генерируем и кешируем страницу.
При обновлении/удалении новости, удаляем ее кешированную страницуСо списками уже сложнее.
Существует множество списков, куда входит новость.
Но опять же можно для каждой кешированной страницы хранить информацию о новостях, выводимых на ней и, в случае обновления одной из этих новостей, удалять кеши всех страниц, на которых эта новость присутствует.Но что делать когда новость добавили в систему?
Как определить какие кеши нобходимо удалить?
http://smarty.php.net/manual/ru/caching.php
очень советую
>http://smarty.php.net/manual/ru/caching.php
>очень советуюПрочел. Предлагают хранит кеш некоторое время (по умолчанию -- час). Потом страница будет кешироваться снова.
Еще проверяет были ли изменены файлы шаблонов, если да, то кеш генерируется по новой.Это не совсем то , что я имел в виду.
Да, кеш по времени -- это крайний вариан (и, возможно, единственный), но хочется найти другое решение.
>Но что делать когда новость добавили в систему?
>Как определить какие кеши нобходимо удалить?Всё рассказывать не буду, но подскажу следующее: формализуй обращения к базе данных - так ты всегда будешь знать когда у тебя был INSERT, когда UPDATE, а когда просто SELECT.
Кстати, прямые никак не контролируемые запросык базе данных - всё равно зло, с которым надо бороться...
>>Но что делать когда новость добавили в систему?
>>Как определить какие кеши нобходимо удалить?
>
>Всё рассказывать не буду, но подскажу следующее: формализуй обращения к базе данных
>- так ты всегда будешь знать когда у тебя был INSERT,
>когда UPDATE, а когда просто SELECT.
>Кстати, прямые никак не контролируемые запросык базе данных - всё равно зло,
>с которым надо бороться...Запросы формализованы. Я знаю, когда происходит UPDATE/DELETE новости и могу получить ее идентификатор. С помощью этих идентификаторов я удаляю из кеша страницы, на которых встречалась измененная/удаленная новость. Это все понятно.
Непонятно следующее, как мне определить, что вновь созданная новость о погоде на завтра встретится на 5-й странице новостей за текущий год, 2-й за текущий месяц да еще на 1-й общей ленты новостей? И кеш именно этих страниц необходимо обновить?
>Непонятно следующее, как мне определить, что вновь созданная новость о погоде на
>завтра встретится на 5-й странице новостей за текущий год, 2-й за
>текущий месяц да еще на 1-й общей ленты новостей? И кеш
>именно этих страниц необходимо обновить?Я в каждой странице-обработчике прописываю какие таблицы используются - структура движка позволяет это делать это достаточно легко и в небольшом количестве файлов.