在本文中,我们将为您详细介绍Golangweb开发实战之session缓存:如何使用redigo将一个结构体数据保存到redis?的相关知识,此外,我们还会提供一些关于22_redis缓存配置及设置把
在本文中,我们将为您详细介绍Golang web 开发实战之 session 缓存:如何使用 redigo 将一个结构体数据保存到 redis?的相关知识,此外,我们还会提供一些关于22_redis 缓存配置及设置把 session 存储在 redis 中、django memcached/redis缓存 =====缓存session、Django Redis 存储 session 会话、django 使用 redis 存放 session的有用信息。
本文目录一览:- Golang web 开发实战之 session 缓存:如何使用 redigo 将一个结构体数据保存到 redis?
- 22_redis 缓存配置及设置把 session 存储在 redis 中
- django memcached/redis缓存 =====缓存session
- Django Redis 存储 session 会话
- django 使用 redis 存放 session
Golang web 开发实战之 session 缓存:如何使用 redigo 将一个结构体数据保存到 redis?
自定义 session 结构体:type Session struct { SessionID string `json:"sessionId" bson:"sessionId"` User *User `json:"-" bson:"user"` UserType string `json:"userType" bson:"userType"` NickName string `json:"nickName" bson:"nickName"` CreateTime time.Time `json:"-" bson:"createTime"` UpdateTime time.Time `json:"-" bson:"updateTime"` Expires time.Time `json:"-" bson:"expires"` Locale string `json:"-" bson:"locale"` // default is zh_CN Menus []wmodel.Menu `json:"menus" bson:"menus"` }
使用 json.Marshal 将结构体 json 化之后保存到 redis:
/* 【增】 描述:向 session 哈希表中插入一个 session 对象 session 顶级 key,顶级 key 可以设置过期时间 <[session]: 要插入的 session 对象 >[error]:插入失败相关信息 */ func (s *sessionService) addSession(session *model.Session) error { // 从池里获取连接 conn := pool.Get() if conn == nil { log.Errorf("redis connnection is nil") return errors.New("redis connnection is nil") } // 用完后将连接放回连接池 defer conn.Close() // 将session转换成json数据,注意:转换后的value是一个byte数组 value,err := json.Marshal(session) if err != nil { log.Errorf("json marshal err,%s",err) return err } log.Infof("send data[%s]",session.SessionID,value) _,err = conn.Do("SET",value) if err != nil { return err } return nil }
Golang 测试验证:
func TestAddSession(t *testing.T) { s := &model.Session{ SessionID: "20150421120000",UserType: "admin",NickName: "df",} err := sService.addSession(s) if err != nil { t.Errorf("fail to add one session(%+v): %s",s,err) t.FailNow() } }
redis 客户端查看该 session 保存情况:
参考资料
GO: How to save and retrieve a struct to redis using redigo22_redis 缓存配置及设置把 session 存储在 redis 中
django 配置 redis 缓存
1. 安装 django-redis 包
pip install -i https://pypi.douban.com/simple django-redis
2. 在 settings.py 文件中,指定 redis 缓存
# 配置redis缓存
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/0", # 使用的redis 0号数据库
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
# 下面还可以配置更多的redis缓存库, 如下:
# 配置一个专门用来存储session的redis数据库1
"session": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1", # 使用redis 1号数据库
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
# ...
}
3. 指定 session 的存储位置,也是在 settings.py 文件中,在 redis 缓存配置后面指定,就可以了
# 指定session缓存存储在哪里
# session存储缓存设置, 把session 存储到 redis中的 数据库1 中
SESSION_ENGINE = ''django.contrib.sessions.backends.cache''
SESSION_CACHE_ALIAS = ''session'' # 上面CACHES字典配置的缓存,key 为 session
django memcached/redis缓存 =====缓存session
- 全站使用
例如 博客等缓存,通过中间件实现全站缓存。
加缓存中间件,那么多中间件加在什么位置?
请求时:缓存加在中间件里的最后一个,比如一次经过1、2、3、4中间件,加在4
返回事:缓存加在中间件里的第一个,如上返回依次经过4、3、2、1,加在1
django 中,导入模块,可以实现。
# 使用中间件,经过一系列的认证等操作,
# 如果内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户,
# 当返回给用户之前,判断缓存中是否已经存在,
# 如果不存在则UpdateCacheMiddleware会将缓存保存至缓存,从而实现全站缓存
MIDDLEWARE = [
''django.middleware.cache.UpdateCacheMiddleware'', # 只有process_response # 其他中间件... ''django.middleware.cache.FetchFromCacheMiddleware'', # 只有process_view ] CACHE_MIDDLEWARE_ALIAS = "" CACHE_MIDDLEWARE_SECONDS = "" CACHE_MIDDLEWARE_KEY_PREFIX = ""
2.2 应用多个缓存时生效的优先级
另外:session引擎缓存配置,就是放在这里的缓存里。
如果同时应用了两个级别的缓存,比如views缓存和模板局部缓存,哪个生效?
哪个生效,和请求的声明周期的有关系的
所以最先生效的是全站、之后views、最后模板局部缓存。
django-redis的应用
# =================django-redis============
settings.py配置cache
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 100} #最大连接数,redis开启连接池pool
# "PASSWORD": "密码", #redis默认没有密码
}}
}
视图函数中使用
from django_redis import get_redis_connection conn = get_redis_connection("default")缓存session(通过redis/memcache之类)
配置 settings.py
SESSION_ENGINE
=
''django.contrib.sessions.backends.cache''
# 启用cache引擎
SESSION_CACHE_ALIAS
=
''default''
# 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
SESSION_COOKIE_NAME =
"sessionid"
# Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串
SESSION_COOKIE_PATH =
"/"
# Session的cookie保存的路径
SESSION_COOKIE_DOMAIN
=
None
# Session的cookie保存的域名
SESSION_COOKIE_SECURE
=
False
# 是否Https传输cookie
SESSION_COOKIE_HTTPONLY
=
True
# 是否Session的cookie只支持http传输
SESSION_COOKIE_AGE
=
1209600
# Session的cookie失效日期(2周)
SESSION_EXPIRE_AT_BROWSER_CLOSE
=
False
# 是否关闭浏览器使得Session过期
SESSION_SAVE_EVERY_REQUEST
=
False
# 是否每次请求都保存Session,默认修改之后才保存
from django.core.cache import cache
cache.has_key(''name'')#判断是否有key等于name
cache.set(key,value,timeout=''过期时间'') timeout可选参数
cache.get(key)
Django Redis 存储 session 会话
通常 redis 都是用来保存 session、短信验证码、图片验证码等数据。
在 django 上使用 redis,先要安装一个包:
pip install django-redis==4.8.0 (我用的 django 是 1.11.1 版本)
在 settings 上配置:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://192.168.8.102:6379/0",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
"session": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://192.168.8.102:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
"sms_codes": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://192.168.8.102:6379/2",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
# 保存 session数据到 Redis中
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "session"
在视图中使用:
# 在redis上查看存储的会话
# 2) ":1:django.contrib.sessions.cachehdrgn4pbtnylv23241089a4ajfkh8f4f"
import json
from django_redis import get_redis_connection
con = get_redis_connection("sms_codes") #con就是StrictRedis类型,default对应settings.py中CACHES中设置的sms_codes。
# dict序列化字符串存储到redis
name = "zhangsan"
val = {"is_login": "True", "username": "zhangsan"}
res = con.set(name, json.dumps(val))
# 从redis取数据
# res = eval(con.get("zhangsan").decode("utf-8"))
res =con.get(name)
print(res)
cp:https://blog.csdn.net/houyanhua1/article/details/84992717
https://blog.csdn.net/houyanhua1/article/details/85052846
https://www.cnblogs.com/yuanchenqi/articles/5716193.html
https://www.jianshu.com/p/2639549bedc8
django 使用 redis 存放 session
1. 安装 & 配置
(1). 首先安装配置 django-redis-sessions:
pip install django-redis-sessions
在 settings.py 中设置 SESSION_ENGINE
, 它默认是: django.contrib.sessions.backends.db 这里设置如下:
SESSION_ENGINE = ''django.contrib.sessions.backends.cache''
(2). 安装配置 django-redis-cache
pip install django-redis-cache
CACHES = {
''default'': {
''BACKEND'': ''redis_cache.RedisCache'',
''LOCATION'': ''127.0.0.1:6379'',
''OPTIONS'': {
''DB'': 0,
''PASSWORD'': '''', # 这里没有设置密码
# ''PARSER_CLASS'': ''redis.connection.HiredisParser'', # 这段可先注释掉否则出现 :Hiredis is not installed的错误
''CONNECTION_POOL_CLASS'': ''redis.BlockingConnectionPool'',
''CONNECTION_POOL_CLASS_KWARGS'': {
''max_connections'': 50,
''timeout'': 20,
}
},
},
}
今天关于Golang web 开发实战之 session 缓存:如何使用 redigo 将一个结构体数据保存到 redis?的分享就到这里,希望大家有所收获,若想了解更多关于22_redis 缓存配置及设置把 session 存储在 redis 中、django memcached/redis缓存 =====缓存session、Django Redis 存储 session 会话、django 使用 redis 存放 session等相关知识,可以在本站进行查询。
本文标签: