Django Session 高阶指南:把数据从 MySQL 搬到 Redis,再谈过期与清除

举报
周杰伦本人 发表于 2025/08/31 20:42:10 2025/08/31
【摘要】 Django Session 高阶指南:把数据从 MySQL 搬到 Redis,再谈过期与清除 一、为什么要换仓库• 默认存 MySQL:可靠但磁盘 IO 重,高并发下 QPS 一高就拖慢整站。• 内存 Redis:单线程 + 纯内存,读写 10w+ QPS 只是日常,重启即丢无所谓——Session 本来就是临时数据。 二、三步迁移到 Redis安装驱动# 在虚拟环境里执行pip ins...

Django Session 高阶指南:把数据从 MySQL 搬到 Redis,再谈过期与清除

一、为什么要换仓库

• 默认存 MySQL:可靠但磁盘 IO 重,高并发下 QPS 一高就拖慢整站。
• 内存 Redis:单线程 + 纯内存,读写 10w+ QPS 只是日常,重启即丢无所谓——Session 本来就是临时数据。

二、三步迁移到 Redis

  1. 安装驱动
# 在虚拟环境里执行
pip install django-redis
# 国内源加速
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django-redis
  1. 修改 settings.py

添加CACHES新增的配置,用来告诉 Django“把 Session、缓存放到 Redis”;

CACHES = {
  "default": {
      "BACKEND": "django_redis.cache.RedisCache",
      "LOCATION": "redis://127.0.0.1:6379/1",   # 1 号数据库
      "OPTIONS": {
          "CLIENT_CLASS": "django_redis.client.DefaultClient",
      }
  }
}

# 让 Session 也走 Redis
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
  1. 验证
    • 重启项目,访问任意写 Session 的页面。
    • 打开 Redis CLI:redis-cli -n 1 keys *django* 能看到新生成的 django_session:xxx 键。
    GET django_session:xxx 可见加密后的 user_id、username——数据已落 Redis。

三、Session 的四种清除姿势

方法 作用域 场景举例
del request.session['k'] 删除单条键值 退出登录时只删 user_id
request.session.clear() 清空数据但保留 session_key 购物车结算后清空商品列表
request.session.flush() 整条记录连同 key 一起删 用户点击“退出登录”彻底销毁
request.session.set_expiry(0) 浏览器关闭即失效 网吧/公共电脑登录

四、动态设置过期时间

# 登录成功时给用户 1 小时有效期
request.session.set_expiry(3600)          # 3600 秒
# 或设为 datetime
from datetime import timedelta
request.session.set_expiry(timedelta(days=10))

支付宝网页版扫码登录后 10 天免登,正是把 set_expiry(86400*10) 写进了登录逻辑。

五、小结

  1. Session 本质是“服务器端字典 + Cookie 指针”。

  2. 存储后端可热插拔:MySQL → Redis 仅需两行配置。

  3. 清除分三级:删值、清内容、毁钥匙。

  4. 过期时间可针对业务精细控制,兼顾安全与体验。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。