分布式Session共享

解决不同服务之间、子域名之间session共享。

四种方案:

1. Session 复制
各个tomcat服务器之间自己同步。
优点:只需要修改tomcat配置
缺点:session同步占用带宽,每个节点都存储了全量session,受内存限制
大型集群下不可取

2. 存到客户端cookies中
存储到浏览器cookies中。
优点:服务器不需要存储
缺点:不安全,受大小限制,每次请求都要携带,浪费网络带宽
这种方式不使用

3. hash一致性
同一个用户的请求根据hash 始终访问同一服务器
优点:只需要更改nginx配置,负载均衡
缺点:session只存在一台服务器中,服务重启导致丢失,水平扩展需rehash
这种反向代理可以使用

4. redis统一存储
引入redis等第三方
优点:没有安全隐患,可以水平扩展,重启不丢失
缺点:增加了一次网络调用,需要写代码,redis比内存慢
SpringSession有完美解决方案可参考官网。

结果

因为原来单体的jsessionid这个cookie默认是当前系统域名的,当拆分服务时,比如不同域名jd.com和passport.jd.com的作用域Domain中的值都是当前服务的,
1.通过Spring Session整合redis实现RedisHttpSession解决不同服务间的共享;
2.实现CookieSerializer自定义将Cookies中存入Domain解决子域名间的共享
在这里插入图片描述

原理

装饰者模式
@EnableRedisHttpSession导入RedisHttpSessionConfiguration配置
1。给容器添加了一个组件SessionRepository,里面是redis操作session的增删改查。
2。SessionRepositoryFilter==>session过滤器,将原始的request,response包装起来,以后request.getSession()获取到的session都是被他包装过的session。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值