Django Session 高阶指南:把数据从 MySQL 搬到 Redis,再谈过期与清除
【摘要】 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
- 安装驱动
# 在虚拟环境里执行
pip install django-redis
# 国内源加速
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django-redis
- 修改
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"
- 验证
• 重启项目,访问任意写 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)
写进了登录逻辑。
五、小结
-
Session 本质是“服务器端字典 + Cookie 指针”。
-
存储后端可热插拔:MySQL → Redis 仅需两行配置。
-
清除分三级:删值、清内容、毁钥匙。
-
过期时间可针对业务精细控制,兼顾安全与体验。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)