PHP + MYSQL кэширование

12
R
На сайте с 03.08.2012
Offline
112
1339

Добрый день.

Подскажите, пожалуйста, как грамотно поступить. Не совсем понимаю.

На странице есть список новостей, который берется из БД. Каждую новость можно комментировать и ставить на неё лайки, дизлайки.

Как правильно это все кэшировать?

Была идея кэшировать вообще всю страницу с новостями, и обновлять кэш раз в несколько минут. Но как быть с лайками и комментариями?

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

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

Joker-jar
На сайте с 26.08.2010
Offline
123
#1

Используйте блочное кеширование - кеширование отдельных элементов страницы (текст, заголовок новости и т.п.).

Оказываю услуги веб-программиста и администратора Linux. ICQ: 751355 | Jabber: jokerjar@jabber.ru | Skype: joker-jar
L
На сайте с 10.02.2015
Offline
122
#2

Храните лайки в мемкеше отдельным ключем...

S
На сайте с 29.09.2009
Offline
94
#3

Как вариант выводить голоса с помощью ajax. У меня так работает на полностью статичном wordpress сайте.

При нажатии на +1 для пользователя выводится очень хорошо видимый значок "+1", становится понятным, что голос учтён. При этом в БД значение увеличивается на +1. При перезагрузке счётчик будет уже на 1 больше.

Смотрел разные системы, как можно реализовать динамические элементы. Это оказался самым простым - т.к. я не программист и делать нужно было всё самому.

При комменте вполне можно сразу сбрасывать и обновлять кэш.

⇒ Яндекс.Директ и Google Adwords на PRO уровне (/ru/forum/946623)
TF-Studio
На сайте с 17.08.2010
Offline
321
#4

Давайте начнем с посещаемости и количество лайков в секунду.

Может и не надо ничего кешировать?

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
R
На сайте с 03.08.2012
Offline
112
#5

На данный момент пиковый онлайн около 200 человек.

Т.е. даже если брать по максимум то около 50 запросов в секунду на лайк/коммент/загрузку контента.

Получается достаточно много запросов.

Сперва идет выборка 10 новостей.

Потом идет по каждой новости выборка комментов + запрос в БД на проверку, ставили ли мы лайк/дизлайк/репост (3 запроса) на эту запись.

Получается за 1 загрузку страницы 22 запроса к базе данных. (42 запроса только на блок новости).

Но там ещё кучу запросов на другие блоки в этой странице. Получается около 100 запросов в том числе и update.

Конечно не очень много, но когда 200 человек онлай, пик получается около 3000-5000 запросов в секунду к БД.

Может и не много. Но посещаемость растет, и через полгода будет около 1000 пиковый онлайн, через год несколько тысяч. (сейчас сайту ещё месяца нет).

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

D
На сайте с 14.01.2007
Offline
153
#6

revered, надо анализировать поведение пользователей на сайте. может имеет смысл в новости хранить кэш лайков, может проще у пользователя статьи с лайками.

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

B
На сайте с 13.02.2008
Offline
228
#7

revered, как выше предложили, я также считаю, что в вашем случае хорошим решением будет - голосование через аджакс. Это будет универсальным независимым от движка и кеширования решением. Тем более для поисковиков эта второстепенная информация не нужна, а пользователям даже удобней будет - голос будет учитываться без перезагрузки страницы.

R
На сайте с 03.08.2012
Offline
112
#8

Да, так и работает.

Голосы и комментарии через AJAX добавляются.

Но проблема в том, что если закэшировать блок целеком, то когда он поставить лайк и обновит страницу (F5), то будет ему показано, что лайк не поставлен, т.к. ещё старая версия блока покажется.

Получается единственный выход убирать кэш каждый раз, как ставят лайк/коммент?

D
На сайте с 14.01.2007
Offline
153
#9
revered:
Получается единственный выход убирать кэш каждый раз, как ставят лайк/коммент?

а как иначе?

на всякий случай: не обновлять ВЕСь кэш, а только для конкретной новости, но это вроде и так понятно

LEOnidUKG
На сайте с 25.11.2006
Offline
1558
#10
Получается за 1 загрузку страницы 22 запроса к базе данных.

Полностью менять архитектуру БД и запросов. Извините, но это глупость на 1 загрузку 22 запроса.

---------- Добавлено 15.04.2016 в 15:44 ----------

ставили ли мы лайк/дизлайк/репост (3 запроса) на эту запись.

Это отдельные таблицы что-ли?!

✅ Трастовых площадок под размещение статей и ссылок. Опыт 12 лет! ( https://searchengines.guru/ru/forum/675690 ) ⭐ Купить вечные трастовые ссылки для сайта ( https://getmanylinks.ru/?srh ) ⭐ Ускорение ваших сайтов (WP, Opencart и др.) + Настройка сервера ( https://searchengines.guru/ru/forum/997205 )
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий