Зачем использовать Redis вместе с Django?

«Зачем использовать Redis вместе с Django?» — вопрос из категории Базы данных, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В DevOps-контексте интеграция Redis с Django решает задачи повышения производительности, масштабируемости и асинхронной обработки. Основные сценарии использования:

  1. Кэширование (Cache Backend): Самый частый случай. Redis, как in-memory хранилище, радикально ускоряет чтение часто запрашиваемых данных, снижая нагрузку на основную реляционную БД (PostgreSQL/MySQL).

    # settings.py
    CACHES = {
        "default": {
            "BACKEND": "django.core.cache.backends.redis.RedisCache",
            "LOCATION": "redis://redis-host:6379/1",  # БД №1 для кэша
            "OPTIONS": {
                "CLIENT_CLASS": "django_redis.client.DefaultClient",
                "SOCKET_CONNECT_TIMEOUT": 5,  # Таймауты для устойчивости
            }
        }
    }

    Использование в коде: cache.set('key', data, timeout=300), cache.get('key').

  2. Брокер для Celery (Message Broker): Для выполнения фоновых задач (отправка email, обработка видео, генерация отчетов).

    # settings.py
    CELERY_BROKER_URL = "redis://redis-host:6379/0"  # БД №0 для Celery
    CELERY_RESULT_BACKEND = "redis://redis-host:6379/0"
  3. Хранение сессий (Session Storage): Позволяет масштабировать Django-приложение на несколько инстансов (например, за балансировщиком), так как сессии хранятся централизованно в Redis, а не локально в памяти каждого воркера.

    SESSION_ENGINE = "django.contrib.sessions.backends.cache"
    SESSION_CACHE_ALIAS = "default"

DevOps-преимущества:

  • Скорость: Запросы к Redis выполняются за микросекунды.
  • Масштабируемость: Отдельный сервис, разгружающий основную БД.
  • Отказоустойчивость: Redis можно настроить в режиме кластера или Sentinel.
  • Универсальность: Один Redis-инстанс может обслуживать кэш, очереди и сессии одновременно (используя разные номера БД).