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

Здравствуйте.
Есть сейчас:
Сейчас есть интернет-магазин написанный на кохане(kohana). В качестве базы используется MySQL. Для кеширования используется Memcached.
Одна из самых посещаемых страниц - главная. На главной странице отображаются товары, каждый товар это не один селект в базу, а довольной сложный запрос с join'ами и т.д.(города, категории, количество купленых и другая информация). Кеширование реализованно следующим образом: Кеш проверяется в memcached и если кеша нет, то берутся данные из базы, отрабатывается логику, записывает в memcached(готовый html) и отдается пользователю. Время кеширования - 40 минут, но при этом раз в 5 минут кеш главной страницы удаляется кроном.
Данные о покупках меняются примерно раз в 10 секунд, соответственно надо обновлять закешированные данные на главной странице.

Вопрос: Как более правильно организовать кеширование? (при условии что могут быть разные выборки, пагинация и т.д.)

Я сейчас хочу сделать:
1. Сделать кеш каждого конкретного товара отдельно
2. Сделать "тригерную" систему удаления кеша, т.е. обновился товар, удалился его кеш
3. Есть ли ограничение в memcached на количество ключей и на их размеры?
4. Где можно почитать, как устроено кеширование в крупных/не очень крупных компаниях, что и как кешируется?
  • Вопрос задан
  • 883 просмотра
Пригласить эксперта
Ответы на вопрос 2
edli007
@edli007
full stack, team lead
И сейчас в меня полял протухшие яйца, потому что все любят холиварить, никто не любит вникать в чужое мнение.
Лично я считаю, делать кеширование на php, это всеравно что носить железобеттонные блоки в руках, потому что дешевле чем нанять кран.

Что касаеться SQL запросов, можно отпимизировать средствами самой базы, например создать фунцию или кешировать запросы самой базой.
Ответ написан
elevenelven
@elevenelven
Php Dev @ Amadeus
Вводим слой кеша и интерфейс для работы с ним. Это важно, потому что легко позволит переключатся между различными реализациями.
Система хранения кеша должна быть общей для всех процессов PHP. (Пространство ключей)
Конкретная реализация может быть выбрана, поменяна, попробована другая. Начните с Memcache, легко сможете попробовать Redis, если понадобиться что-то посложнее ключ-значение.

В кеш складываем готовый html. Потому что генерация html довольно затратный процесс.
Magento вообще подходит радикально к этому - кеширует все и аяксом подгружает юзер-зависимые блоки (корзину).
Ваш слой кеша позволит инвалидировать данные по событиям. Expiration-time, on-update, on-sale и т.д.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы