前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >27. Django 2.1.7 Session 使用Redis存储

27. Django 2.1.7 Session 使用Redis存储

作者头像
Devops海洋的渔夫
发布2022-01-17 09:52:32
3310
发布2022-01-17 09:52:32
举报
文章被收录于专栏:Devops专栏Devops专栏

上一篇Django 2.1.7 Session基本操作,解决 'WSGIRequest' object has no attribute 'session' 问题讲述了Django 2如何开启session以及session的基本操作,但是session是存储在mysql中,这是性能较低的作法。最好的方式是采用内存数据库进行存储,本章节主要讲解如何使用redis存储session。

使用Redis存储Session

会话还支持文件、纯cookie、Memcached、Redis等方式存储,下面演示使用redis存储。

1)安装包。

代码语言:javascript
复制
pip3 install django-redis-sessions

2)修改mysite/settings文件,增加如下项:

代码语言:javascript
复制
SESSION_ENGINE = 'redis_sessions.session'
SESSION_REDIS_HOST = 'localhost'
SESSION_REDIS_PORT = 6379
SESSION_REDIS_DB = 2
SESSION_REDIS_PASSWORD = ''
SESSION_REDIS_PREFIX = 'session'

3)打开assetinfo/views.py文件,修改session_test视图如下:

代码语言:javascript
复制
def session_test(request):
    request.session['h1']='hello'
    return HttpResponse('ok')

4)浏览器访问该视图,在redis客户端中查看数据如下。

到redis中查询key为rpxw80y4cn72wmxfpp0hyc2x5xmnek02 的值,如下:

代码语言:javascript
复制
[root@server01 ~]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> KEYS *
1) "rpxw80y4cn72wmxfpp0hyc2x5xmnek02"
127.0.0.1:6379> get rpxw80y4cn72wmxfpp0hyc2x5xmnek02
"Y2YxYjg0ZDAzNjMwZGZjYzljZmJlNGFlNGY5YjY2MzJiNzZhZWVlZTp7ImgxIjoiaGVsbG8ifQ=="
127.0.0.1:6379>

此时session数据已经自动存储在redis中,查询一下mysql看看有无存储数据,如下:

代码语言:javascript
复制
mysql> select * from django_session;
Empty set (0.00 sec)

mysql>

数据已经没有存储在mysql了。

复制值,在Base64解码中进行解码查看如下图。

查看redis保存的过期时间,如下:

代码语言:javascript
复制
[root@server01 ~]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> KEYS *
1) "rpxw80y4cn72wmxfpp0hyc2x5xmnek02"
127.0.0.1:6379> ttl rpxw80y4cn72wmxfpp0hyc2x5xmnek02
(integer) 1166161
127.0.0.1:6379>

设置session的过期时间

session默认过期时间是两周,那么现在来设置一周来看看。代码如下:

代码语言:javascript
复制
def session_test(request):
    request.session['h1']='hello'
    request.session.set_expiry(value=7*24*3600) # 一周的过期时间
    return HttpResponse('ok')

使用浏览器访问视图,如下:

而redis存储的值也改变,如下:

代码语言:javascript
复制
127.0.0.1:6379> ttl rpxw80y4cn72wmxfpp0hyc2x5xmnek02
(integer) 604733
127.0.0.1:6379>

redis存储的就是 7*24*3600 = 604800 秒。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海洋的渔夫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用Redis存储Session
  • 设置session的过期时间
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档