Фруталити
Новичок
Здравствуйте.
Имеется таблица news, в ней id, текст, заголовок, дата и т.п.
Имеется некий скрипт news.php, выводящий, ну, скажем, 20 последних новостей на сайт. Имеются пользователи и администраторы.
Сейчас новости выводятся по такой схеме:
Небольшое отступление: я, как вы поняли, совершенно непрофессиональный программист, так что если где есть "идейно-неправильные" реализации банальных вещей, я правда буду рад выслушать критику.
Короче, такая схема прекрасно работала, пока я не столкнулся с проблемой кэширования. Использую Cache_Lite.
Вопрос: как бы мне так закэшировать, чтобы нагрузка была минимальной?
Я по части СУБД почти полный ноль, но вот как я рассуждал: без кэширования выполняется 1 запрос каждый раз, когда кто-то хочет почитать новости.
С кэшированием, если я хочу показывать отдельно кэш для админов (ссылки на редактирование, удаление новостей), получаем 20 запросов, чтобы выдернуть из БД тексты, и еще 20, чтобы выдернуть id-шники - и, соответственно, все так красиво в функции оборачиваем, а функции уже вызываем в news.php столько раз, сколько надо (в данном случае 20). В итоге имеем 40 запросов, чтобы сформировать кэш (один раз), и каждый раз при добавлении/удалении/изменении новости.
Шестым чувством ощущаю, что можно сделать как-то по-человечески, попроще, но не могу сообразить как.
Поможете?
С уважением, Александр.
Имеется таблица news, в ней id, текст, заголовок, дата и т.п.
Имеется некий скрипт news.php, выводящий, ну, скажем, 20 последних новостей на сайт. Имеются пользователи и администраторы.
Сейчас новости выводятся по такой схеме:
PHP:
function showTextNews($authorizated)
{
$res = mysql_query("SELECT * FROM `news` WHERE `cid`=2 ORDER BY `id` DESC LIMIT 20");
while ($row = mysql_fetch_array($res))
{
//тут пошло-поехало, и на выходе имеем чистый html, заключенный в переменную $html
//т.е. и непосредственно HTML, и результат запроса
//в том числе (ВНИМАНИЕ), ссылки на изменение и удаление новости, отображаемые только администраторам (для проверки тут используется переменная $authorizated, но это не суть важно, думаю)
}
return $html;
}
Короче, такая схема прекрасно работала, пока я не столкнулся с проблемой кэширования. Использую Cache_Lite.
Вопрос: как бы мне так закэшировать, чтобы нагрузка была минимальной?
Я по части СУБД почти полный ноль, но вот как я рассуждал: без кэширования выполняется 1 запрос каждый раз, когда кто-то хочет почитать новости.
С кэшированием, если я хочу показывать отдельно кэш для админов (ссылки на редактирование, удаление новостей), получаем 20 запросов, чтобы выдернуть из БД тексты, и еще 20, чтобы выдернуть id-шники - и, соответственно, все так красиво в функции оборачиваем, а функции уже вызываем в news.php столько раз, сколько надо (в данном случае 20). В итоге имеем 40 запросов, чтобы сформировать кэш (один раз), и каждый раз при добавлении/удалении/изменении новости.
Шестым чувством ощущаю, что можно сделать как-то по-человечески, попроще, но не могу сообразить как.
Поможете?
С уважением, Александр.