Использование redis в качестве кэша для базы данных mysql


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

Я думаю, например, что если я кэширую информацию, сохраненную в mysql, в базе данных redis, производительность будет улучшена, но я не знаю, хорошая ли это идея, поэтому я хотел бы, чтобы кто-нибудь помог мне выбрать.

Извините, если мой английский не очень хорошо, я из Бразилии.

Author: Simon MᶜKenzie, 2013-04-29

1 answers

Да, redis хорош для этого. Но чтобы понять суть, в основном существует два подхода к кэшированию. В зависимости от того, используете ли вы фреймворк (и какой) или нет, у вас может быть первый вариант, доступный в стандарте или с использованием подключаемого модуля:

  1. Кэшируйте запросы базы данных, то есть выбранные запросы и их результаты будут храниться в redis для более быстрого доступа в течение определенного времени или до очистки кэша (полезно после обновления базы данных). В этом случае вы можете использовать встроенный запрос mysql кэширование, это будет проще, чем использовать дополнительное хранилище значений ключей, или вы можете переопределить интеграцию базы данных по умолчанию с вашим собственным классом, использующим кэш (например, http://pythonhosted.org/johnny-cache/).
  2. Пользовательское кэширование, то есть создание собственных структур для хранения в кэше и периодическое или ручное заполнение их данными, извлеченными из базы данных. Он более гибкий и потенциально более мощный, поскольку вы можете использовать встроенные функции redis, такие как списки или сортированные наборы, которые значительно уменьшают накладные расходы на обновление. Для этого требуется немного больше кода, но обычно он дает лучшие результаты, так как он более индивидуализирован. Хорошим примером является сохранение лучших статей в виде списка идентификаторов redis, а затем доступ к сериализованным статьям с заданным идентификатором также из redis. Вы можете сохранить эту статью ненормализованной, т.Е. сериализованный объект может содержать идентификатор пользователя, а также имя пользователя, чтобы вы могли свести к минимуму накладные расходы на дополнительные запросы.

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

 47
Author: Krzysztof Bujniewicz, 2013-04-29 14:10:28