Django 操作 Redis 完整教程

12小时前学习6

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 redisapt 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})

六、常用场景总结

  1. 缓存页面/数据:减少数据库压力,提升响应速度
  2. 会话存储SESSION_ENGINE 配置后,Django 会话自动存在 Redis
  3. 计数器:点赞数、浏览量、签到统计(incr 命令)
  4. 分布式锁:解决高并发下的数据安全问题
  5. 消息队列:配合 celery 做异步任务

总结

  1. 安装:pip install django-redis redis
  2. 配置:settings.py 中配置 CACHES
  3. 简单使用:from django.core.cache import cache 调用封装方法
  4. 高级使用:get_redis_connection() 获取原生连接,执行所有 Redis 命令
  5. 核心用途:缓存、计数器、会话、高并发优化

扫描二维码推送至手机访问。

版权声明:本文由星光下的赶路人发布,如需转载请注明出处。

本文链接:https://forstyle.cc/zblog/post/113.html

分享给朋友: