Redis в Docker — проще некуда. Одна команда, никакой установки на систему. Легко добавить в docker compose рядом с приложением как кэш или брокер задач.

- Быстрый старт
- Redis с паролем
- Сохранение данных (persistence)
- Redis + приложение через Docker Compose
- Python + Redis — примеры
- Redis как брокер для Celery
- Redis Commander — веб-интерфейс
- Часто задаваемые вопросы
- Как подключиться к Redis в Docker из Python?
- Redis данные сохраняются при перезапуске контейнера?
- Redis Sentinel или Redis Cluster в Docker?
- Что читать дальше по Docker
Быстрый старт
# Запустить Redis 7
docker run -d \
--name my-redis \
-p 6379:6379 \
redis:7
# Подключиться через redis-cli внутри контейнера
docker exec -it my-redis redis-cli
# Базовые операции
SET key "Hello Docker"
GET key # "Hello Docker"
DEL key
PING # PONG
KEYS * # все ключи
FLUSHALL # удалить все ключи
Redis с паролем
# Запустить с requirepass
docker run -d \
--name my-redis \
-p 6379:6379 \
redis:7 \
redis-server --requirepass mypassword
# Подключиться с паролем
docker exec -it my-redis redis-cli -a mypassword
# Или авторизоваться внутри redis-cli
docker exec -it my-redis redis-cli
127.0.0.1:6379> AUTH mypassword
OK
Сохранение данных (persistence)
# По умолчанию Redis хранит всё в RAM
# При docker rm — все данные теряются!
# С persistence через volume
docker run -d \
--name my-redis \
-p 6379:6379 \
-v redis-data:/data \
redis:7 \
redis-server --save 60 1 --loglevel warning
# --save 60 1 = сохранять на диск если за 60 секунд было минимум 1 изменение
# Appendonly — AOF persistence (надёжнее)
docker run -d \
--name my-redis \
-p 6379:6379 \
-v redis-data:/data \
redis:7 \
redis-server --appendonly yes
Redis + приложение через Docker Compose
# docker-compose.yml
version: "3.9"
services:
app:
build: .
ports:
- "5000:5000"
environment:
- REDIS_URL=redis://redis:6379
depends_on:
- redis
restart: unless-stopped
redis:
image: redis:7-alpine
volumes:
- redis-data:/data
command: redis-server --save 60 1 --appendonly yes
restart: unless-stopped
volumes:
redis-data:
Python + Redis — примеры
# pip install redis
import redis
import os
r = redis.from_url(os.getenv("REDIS_URL", "redis://localhost:6379"))
# Проверить соединение
r.ping() # True
# Кэш с TTL
r.set("user:1:name", "John", ex=3600) # TTL 1 час
name = r.get("user:1:name") # b"John"
# Декодировать bytes в строку
name = r.get("user:1:name").decode() # "John"
# Инкрементный счётчик
r.incr("page_views")
r.incr("page_views")
views = int(r.get("page_views")) # 2
# Список (очередь)
r.lpush("tasks", "task3", "task2", "task1")
task = r.rpop("tasks") # b"task1"
# Множество
r.sadd("online_users", "user1", "user2")
r.sismember("online_users", "user1") # True
# Hash (словарь)
r.hset("session:abc123", mapping={"user_id": "42", "role": "admin"})
role = r.hget("session:abc123", "role") # b"admin"
Redis как брокер для Celery
# docker-compose.yml для Flask + Celery + Redis
version: "3.9"
services:
app:
build: .
ports:
- "5000:5000"
depends_on:
- redis
worker:
build: .
command: celery -A app.celery worker --loglevel=info
depends_on:
- redis
restart: unless-stopped
redis:
image: redis:7-alpine
restart: unless-stopped
# Flask + Celery
from flask import Flask
from celery import Celery
import os
app = Flask(__name__)
celery = Celery(app.name, broker="redis://redis:6379/0")
@celery.task
def send_email(to, subject, body):
# Выполняется асинхронно в worker контейнере
# ...
return "sent"
@app.route("/send")
def trigger():
send_email.delay("user@example.com", "Hello", "Body")
return "Email queued!"
Redis Commander — веб-интерфейс
# Добавить в docker-compose.yml
redis-commander:
image: rediscommander/redis-commander:latest
environment:
- REDIS_HOSTS=local:redis:6379
ports:
- "8081:8081"
depends_on:
- redis
Открыть в браузере: http://localhost:8081 — просмотр ключей, значений, TTL, управление данными Redis.
Часто задаваемые вопросы
Как подключиться к Redis в Docker из Python?
Установить: pip install redis. Подключиться: r = redis.from_url("redis://localhost:6379") — если Redis на хосте или пробрасывает порт. Если приложение в Docker Compose — redis://redis:6379 где redis — имя сервиса. С паролем: redis://:password@redis:6379. Проверить соединение: r.ping().
Redis данные сохраняются при перезапуске контейнера?
По умолчанию — нет. Redis хранит всё в RAM, при docker stop/docker rm данные теряются. Для сохранения нужен volume + persistence: запусти с --appendonly yes (AOF) или --save 60 1 (RDB). При docker stop Redis корректно завершается и сбрасывает AOF/RDB — данные сохраняются если есть volume.
Redis Sentinel или Redis Cluster в Docker?
Для большинства проектов — обычный Redis с persistence достаточно. Redis Sentinel — высокая доступность: один master + несколько replica + sentinel процессы для автоматического failover. Redis Cluster — горизонтальное масштабирование для очень больших нагрузок (сотни ГБ данных). Оба варианта значительно сложнее в настройке. Начни с простого — добавь сложность только когда упрёшься в ограничения.
Что читать дальше по Docker
Чтобы связать тему с соседними практическими материалами, дальше удобно открыть:
- Docker Compose — запускать Redis вместе с приложением.
- Docker network — настроить подключение между контейнерами.
- Python Flask в Docker — использовать Redis во Flask-проекте.
- Docker volumes — сохранить данные Redis при необходимости.



