2013-04-28 13 views
25

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

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

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

+1

Вы спрашиваете, полезно ли кэшировать базу данных или нет? – galdikas

+1

yeah redis is good – shapeshifter

+0

Я использую redis перед собой, но вы хотите посмотреть на таблицы 'MySQL' HEAP', если вы уже используете' MySQL' – NappingRabbit

ответ

44

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

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

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

+0

Спасибо Krzysztof Bujniewicz –

+0

Спасибо, Кшиштоф Буйневич. Я буду использовать номер два, база данных mysql уже существует и имеет много данных, поэтому я перемещаю копию в redis и когда пользователь сохраняет новые данные, программа будет сохранять в mysql, когда пользователь будет вызывать результаты или отчеты, которые программа будет использовать Redis. Что Вы думаете об этом? Я буду использовать структуру Yii. http://www.yiiframework.com/ –

+0

старайтесь не копировать базу данных 1: 1, а скорее ставьте туда сериализованные объекты, после манипуляций с данными, полученными из mysql, готовыми к использованию в приложении. Хорошим примером является сохранение лучших статей в виде redis-списка идентификаторов, а затем доступ к сериализованным статьям (-ам) с заданным идентификатором также из redis. –

Смежные вопросы