Как я могу использовать Redis с Django?


95

Я слышал о Redis-cache, но как именно он работает? Используется ли он как слой между django и моими rdbms, каким-то образом кэшируя запросы rdbms?

Или его предполагается использовать непосредственно как базу данных? В чем я сомневаюсь, так как эта страница github не охватывает никаких данных для входа, никаких настроек ... просто говорит вам установить какое-то свойство конфигурации.

Ответы:


73

Этот модуль Python для Redis имеет четкий пример использования в файле readme: http://github.com/andymccurdy/redis-py

Redis разработан как кеш RAM. Он поддерживает базовые GET и SET ключей плюс хранение коллекций, таких как словари. Вы можете кэшировать запросы RDBMS, сохраняя их вывод в Redis. Целью было бы ускорить работу вашего сайта Django. Не начинайте использовать Redis или любой другой кеш, пока вам не понадобится скорость - не оптимизируйте преждевременно.


Но как проверить, что кеш Redis нуждается в обновлении? Вы сравниваете количество записей или есть способ лучше?
Маркони

7
Обычно это делается путем установки TTL для ключа: redis.io/commands/ttl . Если срок действия ключа истекает, вы должны перейти в БД. Итак, если ключ находится в Redis, вы его используете. Обратите внимание, что простая реализация этого вызывает некоторые проблемы: когда срок действия популярного ключа истекает, у вас есть en.wikipedia.org/wiki/Thundering_herd_problem , вы хотите использовать en.wikipedia.org/wiki/Negative_cache , а вашей БД требуется en.wikipedia. org / wiki / Admission_control
Спайк Гроним, 04

4
Умм, ну а) Redis спроектирован как нечто большее, чем кэш ОЗУ - он постоянный (но включает в себя функции для кеширования), б) это больше, чем простое хранилище значений ключа - есть списки, хеш-наборы и т.
Olli

8
Честно говоря, кэширование объектов модели / ответа не подпадает под преждевременную оптимизацию. Если вам не за это платят (как на heroku), кеширование не повредит даже для небольших приложений.
vikki

1
Дело не в скорости, а в ресурсах. Таблица в кеше будет дешевле.
dman

60

Тот факт, что Redis хранит вещи в памяти, не означает, что он предназначен для использования в качестве кеша. Я видел, как люди использовали его как постоянное хранилище данных.

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

В любом случае, суть остается в силе, да, Redis можно использовать в качестве базы данных.


3
В моей компании мы используем Redis для хранения сводок и продуктов, созданных с помощью Cassandra и Postgres. Количество этих продуктов (несколько миллиардов), частота их изменения и то, что мы никогда не знаем, что нужно в любой момент, делает их идеальными для Redis. Кроме того, если вы превысите миллион строк чего-либо в базе данных SQL, redis может стать отличным дополнительным ресурсом для тестирования членства (например, находятся ли эти объекты в этом домене?)
Дэвид

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

22

Redis - это, по сути, магазин KV «в памяти» с множеством наворотов. Он очень гибкий. Вы можете использовать его как временное хранилище, например кеш, или постоянное хранилище, например базу данных (с оговорками, упомянутыми в других ответах).

В сочетании с Django лучшим / наиболее распространенным вариантом использования Redis, вероятно, является кеширование «ответов» и сеансов.

Здесь есть бэкэнд https://github.com/sebleier/django-redis-cache/ и отличная документация в документах Django здесь: https://docs.djangoproject.com/en/1.3/topics/cache/ .

Недавно я начал использовать https://github.com/erussell/django-redis-status для мониторинга своего кеша - работает прелесть. (Настройте maxmemory в Redis, иначе результаты не будут очень полезными).


5

Вы также можете использовать Redis в качестве очереди для распределенных задач в вашем приложении Django. Вы можете использовать его в качестве брокера сообщений для Celery или Python RQ .


2

Redis как основная база данных

Да, вы можете использовать хранилище ключей и значений Redis в качестве первичной базы данных. Redis не только хранит пары ключ-значение, но также поддерживает различные структуры данных, такие как

  1. Список
  2. Задавать
  3. Сортированный набор
  4. Хеши
  5. Растровые изображения
  6. Гиперлоглоги

Типы данных Redis Официальный документ

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

Redis также может сохранять официальную документацию проверки данных.

Официальный документ Redis Persistence


Redis как кеш

Да, Redis находится между Django и RDBMS.

Как это работает

given a URL, try finding that page in the cache if the page is in the cache: return the cached page else: generate the page save the generated page in the cache (for next time) return the generated page

Фреймворк кеширования Django Официальный документ


Как можно использовать Redis с Django

Мы можем использовать redis-клиент python redis-py для приложения Django.

Redis-клиент python redis-py Github

Мы можем использовать Django-redis для бэкэнда кеширования django.

Django-redis основан на redis-py и добавил дополнительные функции, связанные с приложением django.

Django-redis doc Github

Существуют и другие библиотеки.


Примеры использования и типы данных Redis

Некоторые варианты использования

  • Кеш сеанса
  • Аналитика в реальном времени
  • Веб-кеширование
  • Таблицы лидеров

Основные варианты использования Redis по типам структур основных данных


Крупные технологические компании, использующие Redis

 Twitter GitHub Weibo Pinterest Snapchat Craigslist Digg StackOverflow Flickr 

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.