Django 操作 Redis 完整教程
Redis 是一款高性能的内存数据库,Django 中常用来做缓存、会话存储、计数器、消息队列等。下面我带你从安装配置 → 基础使用 → 高级操作完整掌握 Django 操作 Redis 的方法。
一、环境准备
1. 安装依赖包
Django 操作 Redis 最常用的库是 django-redis(官方推荐):
pip install django-redis redis
2. 本地/服务器启动 Redis
确保你的设备已经安装并启动了 Redis 服务:
- Windows:下载 Redis 安装包,启动
redis-server.exe - Mac/Linux:
brew install redis或apt install redis-server,执行redis-server启动
二、Django 配置 Redis
打开项目的 settings.py,添加以下配置:
1. 核心配置(最常用)
# settings.py
# 配置 Redis 为缓存后端
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
# Redis 地址:格式 redis://:密码@主机:端口/数据库编号
# 无密码:redis://127.0.0.1:6379/1
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
# 连接池配置(优化性能)
"CONNECTION_POOL_KWARGS": {"max_connections": 100}
}
}
}
# 可选:将 Django 会话存储到 Redis
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
三、基础操作(缓存/键值对)
django-redis 封装了 Django 原生缓存 API,无需手动连接 Redis,直接调用即可。
1. 导入缓存对象
from django.core.cache import cache
2. 常用命令
# 1. 设置缓存(key, value, 过期时间/秒)
cache.set("username", "zhangsan", timeout=60) # 60秒后过期
cache.set("age", 20) # 不写timeout:永久有效
# 2. 获取缓存
name = cache.get("username") # 存在返回值,不存在返回None
age = cache.get("age", 0) # 不存在时返回默认值0
# 3. 删除缓存
cache.delete("username") # 删除指定key
cache.clear() # 清空当前数据库所有缓存(谨慎使用!)
# 4. 判断key是否存在
cache.has_key("username")
# 5. 自增/自减(适合做计数器、点赞数)
cache.set("view_count", 0)
cache.incr("view_count") # +1 → 1
cache.incr("view_count", 5) # +5 → 6
cache.decr("view_count") # -1 → 5
四、直接操作原生 Redis 命令(进阶)
Django 封装的 API 不够用时,可以获取原生 Redis 连接,执行 Redis 所有原生命令(哈希、列表、集合等)。
1. 获取原生 Redis 客户端
from django_redis import get_redis_connection
# 获取连接(使用settings.py中配置的default连接)
redis_conn = get_redis_connection("default")
2. 原生 Redis 常用操作
# 字符串
redis_conn.set("name", "lisi")
print(redis_conn.get("name").decode()) # 二进制转字符串
# 哈希(适合存储对象)
redis_conn.hset("user:1", "name", "wangwu")
redis_conn.hset("user:1", "age", 25)
print(redis_conn.hgetall("user:1")) # 获取所有字段
# 列表
redis_conn.lpush("task_list", "任务1")
redis_conn.rpush("task_list", "任务2")
print(redis_conn.lrange("task_list", 0, -1)) # 获取所有元素
# 设置过期时间
redis_conn.expire("user:1", 300) # 5分钟后过期
# 删除key
redis_conn.delete("name")
五、实战:Django 视图中使用 Redis
示例:文章浏览量统计(防刷新)
# views.py
from django.shortcuts import render
from django.core.cache import cache
def article_detail(request, article_id):
# 浏览量key
view_key = f"article:{article_id}:views"
# 自增浏览量
cache.incr(view_key)
# 获取浏览量
view_count = cache.get(view_key, 0)
return render(request, "article.html", {"views": view_count})
示例:缓存热门数据(优化数据库查询)
def hot_articles(request):
# 先从缓存取
hot_list = cache.get("hot_article_list")
# 缓存不存在,查询数据库并写入缓存
if not hot_list:
hot_list = Article.objects.filter(is_hot=True)
cache.set("hot_article_list", hot_list, timeout=60*10) # 缓存10分钟
return render(request, "hot.html", {"articles": hot_list})
六、常用场景总结
- 缓存页面/数据:减少数据库压力,提升响应速度
- 会话存储:
SESSION_ENGINE配置后,Django 会话自动存在 Redis - 计数器:点赞数、浏览量、签到统计(
incr命令) - 分布式锁:解决高并发下的数据安全问题
- 消息队列:配合 celery 做异步任务
总结
- 安装:
pip install django-redis redis - 配置:
settings.py中配置CACHES - 简单使用:
from django.core.cache import cache调用封装方法 - 高级使用:
get_redis_connection()获取原生连接,执行所有 Redis 命令 - 核心用途:缓存、计数器、会话、高并发优化



