@EnableSpringHttpSession原理笔记

分布式集群Session共享问题解决方案-@EnableRedisHttpSession

使用redis数据库存储session代替本地存储session

@EnableRedisHttpSession

  1. 使用存储本地服务器的方式和使用存储Redis数据库的方式 都需要支持HttpSessionEvent
  2. HttpSessionEvent主要包含三个事件
    1. 创建事件
    2. 过期事件(过期用户自动登出)
    3. 销毁事件
  3. 使用本地存储的时候,可以使用设置监听的方式,监听事件的发生,从而做出相应的处理
  4. 使用Redis存储的时候,需要使用的KeySpce Notification键空间通知
    在这里插入图片描述
  5. Spring Session原理示意图
    在这里插入图片描述
Spring session在数据库中的存储形式

在这里插入图片描述
spring session 在redis数据库中会存在三个key如上图所示:exprationssessionsexpires

Redis + Spring session数据结构及作用

在这里插入图片描述

Redis触发过期事件的方式

redis 需要触发过期事件,才能向spring服务端发送键空间通知
redis session的最大的延迟事件是1分钟

  1. 客户端访问的时候发现key过期
  2. redis在一定事件间隔频率在后台逐步查找过期键

如果仅用上述两个redis自带的机制无法保证key的过期事件抵达后立即生成过期事件。

通过添加key的方式实现及时过期session的需求在这里插入图片描述

exprations里存的是 这一分钟里的所有的key,是set结构的

@EnableRedisHttpSession 设置默认的过期事件是30分钟
@RedisHttpSessionConfiguration 设置web服务没分钟的0秒去redis请求该分钟内的过期的key
SpringHttpSessionConfiguration 定义了SessionRepositoryFilter
SessionRepositoryFilter里进行了Request 和 Response的包装
在这里插入图片描述
getSession的时候先从Reques里尝试 获取,如果没有将创建新Session
response对象commit()的时候将session信息保存到redis数据库
EnableRedisHttpSession 中有一个onMessage(),可以接收Redis的键空间通知,接收到通知后发送Session过期Event事件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉默的游鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值