У меня есть несколько таблиц, к которым часто обращаются пользователи. Такие же запросы запускаются снова и снова, что вызывает дополнительную нагрузку на сервер.
Записи не вставляются и не обновляются часто, я думал о том, чтобы кэшировать идентификаторы в memcached, а затем извлекать их из базы данных, это уменьшит нагрузку на поиск/сортировку и т.д.
Вот пример
SELECT P.product_id FROM products P, product_category C WHERE P.cat_id=C.cat_id AND C.cat_name='Fashion' AND P.is_product_active=true AND C.is_cat_active=true ORDER BY P.product_date DESC
В приведенном выше запросе будут возвращены все идентификаторы продуктов определенной категории, которые будут импортированы в memcached, а затем остальная часть процесса (т.е. пейджинг) будет смоделирована так же, как и с наборами результатов mysql.
Процесс вставки либо завершит кеширование, либо введет идентификатор продукта в первую строку массива.
Мой вопрос в том, что это практический подход? Как люди обращаются к поисковым запросам, говорят, что если человек ищет продукт, который возвращает 10000 результатов (практически не представляется возможным), они выполняют поиск по всем таблицам времени? Есть ли какой-нибудь хороший пример memcached и mysql, который показывает, как эти задачи могут быть выполнены?
вы можете спросить себя, действительно ли вам нужно сделать недействительным кеш при вставке/обновлении продукта.
Обычно для списка продуктов может быть допустим 5-минутный кэш.
Если ваша схема недействительности основана только на времени (новые записи появятся только через 5 минут), вы можете быстро использовать и использовать тэки memcache: просто используйте в качестве ключа memcache md5 строки запроса sql, и сообщите memcache, чтобы сохранить результат выбора в течение 5 минут.
Я надеюсь, что это поможет вам