SpringBoot Redis 实战-分布式 Session 共享

SpringBoot Redis 实战-分布式 Session 共享

业务场景分析

以往我们的项目都是部署在单台服务器运行,因为客户的所有请求都是由唯一服务器来处理, sessionld保存在这台服务器上是没有问题的但是当项目同时部署在多台服务器上时,就会出现 sessionld共享问题。

现在有两台服务器同时运行,分别是 Server A 和 Server B,通过 nginx配置了负载均衡,客户端的请求会被随机分配到两台服务器上进行处理假设客户现在有第一次请求(登录请求)被分配到 Server A进行处理, Serve A接受到请求之后会生成 sessionld并且保存到内存当中,然后返回给客户(浏览器),浏览器会把 sessionld保存到 cookie中,第一次请求完成。

如果之后每一次请求还是由 Server A处理当然一切正常,但是一旦出现意外(比如 Server A机)或者 nginx采用了轮询、 weight式负载均衡,请求被分配到 Server B进行处理,这时候 Server B拿到客户请求的 sessionld是由 Server A生成的,两边对不上啊!于是客户会发现,本来还用的好好的怎么会突然跳到登录页需要重新登录了呢???

实现思路

既然问题的根源出在 sessionld无法共享上面,那么是不是让 sessionld可以在多台服务器之间共享就可以了?换个思路,即把 sessionld保存到数据库即可(最终选择 redis因为会比较快!),验证时不再从当前服务器获取 sessionld改从 redis中获取即可

实现思路

  1. 登录页面提交用户名密码
  2. 登录成功后生成 token, Tokensessionid相当于原来的,字符串,可以使用uuid
  3. 把用户信息保存到 rediskey就 token是, valueuserid就是
  4. 设置key的过期时间。模拟 Session的过期时间。一般一个小时
  5. 拦截器拦截请求校验 sessionld.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一名技术极客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值