redis缓存存储Session原理机制


Posted in Redis onNovember 20, 2021

基于 Redis 存储 Session

如果我们想将 session 数据保存到 redis 中,只要将 session 的存储引擎改成 redis 即可。

使用 redis 作为存储引擎的例子:

首先安装 redis 存储引擎的包

go get github.com/gin-contrib/sessions/redis
// 初始化基于 redis 的存储引擎
// 参数说明: 
// 第 1 个参数 - redis 最大的空闲连接数 
// 第 2 个参数 - 数通信协议 tcp 或者 udp 
// 第 3 个参数 - redis 地址, 格式,host:port 
// 第 4 个参数 - redis 密码
// 第 5 个参数 - session 加密密钥
	store, _ := redis.NewStore(10, "tcp", "localhost:6379", "", []byte("secret"))
	r.Use(sessions.Sessions("mysession", store))

设置session过期时间

//配置session的过期时间
		session.Options(sessions.Options{MaxAge:3600*6 })//6小时=60*60*6

分布式获取Session:(redis)

redis缓存存储Session原理机制

查看当前的redis值:
keys *
set key vlaue 设置键值对
get key 查看值(加密)
package main
import (
	"github.com/gin-contrib/sessions"
	"github.com/gin-contrib/sessions/cookie"
	"github.com/gin-contrib/sessions/redis"
	"github.com/gin-gonic/gin"
)
func main() {
	r := gin.Default() 
	//配置session的中间件
 	store, _ := redis.NewStore(10, "tcp", "localhost:6379", "", []byte("secret"))
	r.Use(sessions.Sessions("mysession", store)) 
	//initMiddleware:配置路由中间件
	r.GET("/", func(c *gin.Context) {
		//设置sessions
		session := sessions.Default(c)
		//配置session的过期时间
		session.Options(sessions.Options{MaxAge:3600*6 })//6小时=60*60*6
		session.Set("username", "成强")
		//保存sessions:给其他页面使用(必须调用)
		session.Save() 
		c.String(200, "gin首页")
	})
	r.GET("/news", func(c *gin.Context) {
		//获取sessions
		session := sessions.Default(c)
		username := session.Get("username") 
		c.String(200, "username=%v", username)
	})
}

 以上就是redis缓存存储Session原理机制的详细内容,更多关于redis存储Session的资料请关注三水点靠木其它相关文章!

Redis 相关文章推荐
解决redis sentinel 频繁主备切换的问题
Apr 12 Redis
Redis如何一键部署脚本
Apr 12 Redis
基于Redis过期事件实现订单超时取消
May 08 Redis
Redis基于Bitmap实现用户签到功能
Jun 20 Redis
解析Redis Cluster原理
Jun 21 Redis
Redis如何实现分布式锁
Aug 23 Redis
基于Redis的List实现特价商品列表功能
Aug 30 Redis
聊聊redis-dump工具安装问题
Jan 18 Redis
Redis命令处理过程源码解析
Feb 12 Redis
详解Redis的三种常用的缓存读写策略步骤
May 06 Redis
Redis唯一ID生成器的实现
Jul 07 Redis
Redis实战之Lettuce的使用技巧详解
Dec 24 Redis
CentOS8.4安装Redis6.2.6的详细过程
SpringBoot整合Redis入门之缓存数据的方法
Nov 17 #Redis
Window server中安装Redis的超详细教程
关于SpringBoot 使用 Redis 分布式锁解决并发问题
Redis Stream类型的使用详解
Redis 持久化 RDB 与 AOF的执行过程
Redis模仿手机验证码发送的实现示例
You might like
在Linux系统下一键重新安装WordPress的脚本示例
2015/06/30 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
PHP支付系统设计与典型案例分享
2016/08/02 PHP
PHP之认识(二)关于Traits的用法详解
2019/04/11 PHP
Javascript表达式中连续的 && 和 || 之赋值区别
2010/10/17 Javascript
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
2011/10/21 Javascript
js如何取消事件冒泡
2013/09/23 Javascript
Node.js中对通用模块的封装方法
2014/06/06 Javascript
javascript event在FF和IE的兼容传参心得(绝对好用)
2014/07/10 Javascript
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
JavaScript对象学习小结
2015/09/02 Javascript
浅谈Javascript中substr和substring的区别
2015/09/30 Javascript
很不错的两款Bootstrap Icon图标选择组件
2016/01/28 Javascript
再谈javascript常见错误及解决方法
2016/09/16 Javascript
Html5 js实现手风琴效果
2020/04/17 Javascript
js 动态生成html 触发事件传参字符转义的实例
2017/02/14 Javascript
jQuery validate 验证radio实例
2017/03/01 Javascript
vue.js项目中实用的小技巧汇总
2017/11/29 Javascript
vue中改变选中当前项的显示隐藏或者状态的实现方法
2018/02/08 Javascript
react项目实践之webpack-dev-serve
2018/09/14 Javascript
快速了解Node中的Stream流是什么
2019/02/13 Javascript
layui表格内放置图片,并点击放大的实例
2019/09/10 Javascript
Vue $emit()不能触发父组件方法的原因及解决
2020/07/28 Javascript
js回到页面指定位置的三种方式
2020/12/17 Javascript
Python中用于转换字母为小写的lower()方法使用简介
2015/05/19 Python
Python 获取numpy.array索引值的实例
2019/12/06 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
2020/02/17 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
Python如何使用input函数获取输入
2020/08/06 Python
初中科学教学反思
2014/01/21 职场文书
财务总监管理岗位职责
2014/03/08 职场文书
廉洁家庭事迹材料
2014/05/15 职场文书
预备党员公开承诺书
2014/05/28 职场文书
父亲节活动策划方案
2014/08/24 职场文书
教育实习指导教师评语
2014/12/31 职场文书
父亲去世追悼词
2015/06/23 职场文书