Як я можу використовувати Redis разом з Django?


95

Я чув про кеш-пам'ять, але як саме це працює? Чи використовується він як шар між django та моїми rdbms, якось кешуючи запити rdbms?

Або він повинен використовуватися безпосередньо як база даних? Що я сумніваюся, оскільки ця сторінка github не охоплює жодних даних для входу, жодних налаштувань .. просто говорить вам встановити деяку властивість config.

Відповіді:


72

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

Redis призначений для кешу оперативної пам'яті. Він підтримує основні клавіші 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
Спайк Гронім

4
Ну, ну, а) а) Redis розроблений таким чином, щоб бути більше, ніж кеш-пам’ять оперативної пам’яті - він постійний (але включає функції кеш-пам’яті), б) це більше, ніж просто зберігання ключових значень - є списки, хешсети тощо із вбудованими маніпуляціями.
Оллі

8
Чесно кешовані об'єкти моделі / відповіді не підпадають під час передчасної оптимізації. Якщо ви не звинувачуєте в цьому (наприклад, на heroku), це не завадить кешувати навіть для невеликих додатків.
vikki

1
Справа не в швидкості, а в ресурсах. Таблиця в кеші буде дешевшою.
дман

60

Тільки тому, що Redis зберігає речі в пам'яті, це не означає, що це призначено для кешу. Я бачив людей, які використовують його як постійний сховище даних.

Те, що його можна використовувати як кеш, - це натяк на те, що він корисний як високопродуктивне сховище. Якщо ваша система Redis виходить з ладу, ви можете втратити дані, які не були записані знову на диск. Існують деякі способи пом'якшити такі небезпеки, наприклад, реплика гарячої очікування. Якщо ваші дані "критично важливі", наприклад, якщо ви керуєте банком або магазином, Redis може бути не найкращим вибором для вас. Але якщо ви пишете гру з високим трафіком із постійними живими даними або якимись соціальними взаємодіями та керуєте, що ймовірність втрати даних є цілком прийнятною, то Redis, можливо, варто переглянути.

У будь-якому разі, точка залишається, так, Redis можна використовувати як базу даних.


3
Для моєї компанії ми використовуємо Redis для зберігання підбиття підсумків та продуктів, створених від Cassandra & Postgres. Кількість цих продуктів (кілька мільярдів), те, як часто їх потрібно міняти, і те, що ми ніколи не знаємо, що потрібно в будь-який момент, робить їх ідеальними придатними для переробки. Крім того, коли ви перевищуєте мільйон рядків будь-чого в базі даних 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 не тільки зберігає пари ключ-значення, але також підтримує різні структури даних, як-от

  1. Список
  2. Встановити
  3. Відсортований набір
  4. Хеші
  5. Растрові карти
  6. Гіперлоги

Redis Типи даних Офіційний док

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

Redis також може зберігати перевірку даних офіційного документа.

Redis Persistence Офіційний док


Редіс як кеш

Так, 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 client 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.