在 Django 中集成 Redis 主要分两步:
- 安装并启动 Redis(系统层面)。
- 在 Django 项目里选一个「Redis 客户端/封装库」并配置好。
下面给出 2025 年最常用、最省事的 3 种场景与完整代码,复制即可跑。
一、准备工作(所有场景通用)
安装 Redis(以 Ubuntu 为例) sudo apt update && sudo apt install redis -y sudo systemctl enable --now redis
确认 Redis 监听端口 redis-cli ping # 返回 PONG 即可
安装 Python 依赖 pip install django redis hiredis # hiredis 为 C 加速解析器,可选但强烈推荐
二、场景 1:仅做「低阶」缓存 / 计数器 / 队列
直接用官方 redis-py,不想装第三方包。
python -m pip install -U redis hiredis
python -c "import redis, django; print('redis', redis.__version__)"project/settings.py
CACHES = {
"default": {
"BACKEND": "django.core.cache.backends.redis.RedisCache", # Django≥4.0 内置
"LOCATION": "redis://127.0.0.1:6379/0", # 0 号库
"KEY_PREFIX": "demo", # 全局前缀,防止冲突
# "OPTIONS": {
# "CLIENT_CLASS": "django_redis.client.DefaultClient",
# "CONNECTION_POOL_KWARGS": {"max_connections": 50, "retry_on_timeout": True},
# "SERIALIZER": "django_redis.serializers.msgpack.MSGPackSerializer", # 比 pickle 快
# },
# "TIMEOUT": 300, # 默认 5 min
}
}
# 如想全局开启缓存中间件、模板缓存等,再按官方文档打开即可。视图里即用:
from django.core.cache import cache
cache.set("foo", {"bar": 1}, 60)
print(cache.get("foo"))三、场景 2:需要「高级」缓存 + 自动序列化 + 分布式锁
装 django-redis(最成熟,star 4k+)。
pip install django-redis
settings.py 只需把 BACKEND 换成:
"BACKEND": "django_redis.cache.RedisCache",其余同上。
django-redis 额外福利:
- 原生支持分布式锁
from django_redis import get_redis_connection
with cache.lock("payment_123", timeout=20, blocking_timeout=5):
do_something()- 直接拿原生连接,可执行任意 Redis 命令
conn = get_redis_connection("default")
conn.zadd("rank", {"alice": 100, "bob": 90})四、场景 3:把 Redis 当「消息队列」用(异步任务 / 定时任务)
推荐 django-q2(轻量,纯 Redis 实现,零额外组件)。
pip install django-q2
settings.py
INSTALLED_APPS += ["django_q"]
Q_CLUSTER = {
"name": "demo",
"workers": 4, # 并发 worker 数
"timeout": 60,
"retry": 120,
"redis": {
"host": "127.0.0.1",
"port": 6379,
"db": 2, # 单独库
},
}启动后台集群: python manage.py qcluster
视图里异步调用:
from django_q.tasks import async_task
async_task("myapp.utils.send_mail", user_id=123) # 函数路径字符串即可五、常见坑与排查
连接失败
redis-cli ping 先排除网络;Django 日志打开LOGGING = {... 'level': 'DEBUG'}看 traceback。中文乱码
保证SERIALIZER使用 msgpack 或 json,不要用 pickle(还会带来 RCE 风险)。大 key 阻塞
用redis-cli --bigkeys定期巡检;或设置timeout=5秒。多虚拟主机共用
一定加KEY_PREFIX或分开 Redis DB,防止 key 冲突。
六、一键验证脚本
# 任意 app 下建 management/commands/test_redis.py
from django.core.management.base import BaseCommand
from django.core.cache import cache
class Command(BaseCommand):
def handle(self, *args, **opts):
cache.set("ping", "pong", 10)
assert cache.get("ping") == "pong"
self.stdout.write(self.style.SUCCESS("Redis 集成成功!"))执行:
python manage.py test_redis
看到绿色成功即可。
总结
- 只想缓存:Django≥4 已内置,零依赖。
- 要锁 / 管道 / 高级功能:django-redis。
- 要异步任务:django-q2(或 Celery,但更重)。
按场景挑一段配置粘进 settings,即可把 Redis 集成到 Django。祝开发顺利!