JavaWeb: Redis存储Session方案
2019独角兽企业重金招聘Python工程师标准>>>
所有支持Servlet规范的容器都自带session管理,于是大多数人都使用HttpSession
接口存放状态信息。事实上, servlet的session会使得应用服务器水平扩展变的非常困难。
使用Servlet Session时的妥协方案
Session Replication
这无疑是一种浪费内存的方法,对于5台左右的集群还可以忍受,如果你需要几十甚至上百台集群,这就完全不可行。
Session Sticky
该方案虽然可以避免上面的问题,但是这完全背离了负载均衡的初衷。假如有A, B服务器,A处理session为1 ~ 5的请求,B处理session为6 ~ 10的请求,如果某个时间段内,有1 ~ 5 session的用户访问需求非常高,而6 ~ 10 session的用户不怎么访问,这样就会导致A服务器负载过高而B却十分清闲,此时负载均衡就失去了意义。
使用Redis进行Session存储
在应用编写时应该完全弃用HttpSession
接口,而是将需要保存的状态信息放到Redis中。
生成session id
当用户登陆时,服务器生成一个全局唯一的字符串SESSION:日期:20位随机字符串
做为redis中hash数据结构的key名,然后将该标识做为cookie返回给客户端。 之后该用户的后续请求都会带上此cookie, 我们编写一个filter, 其作用为读取请求中的标识,从redis中取出该标识对应的数据,然后放到HttpServletRequest
对象中以供后续使用。
session过期
使用redis自带的过期功能为session id设置过期时间,轻松实现session过期。
session追踪
我们可以将每个用户的session id记录下来,如保存到数据库中,或者依然放在redis里,这样就可以查到某个注册用户所有session id, 轻松实现踢出登陆功能。
session更新
通过AOP, 在每个请求完后之后,检查在请求处理过程中有没有更新session信息,如果有则将新数据刷新到Redis中。
将session转移到redis中后,只要做好redis的运维工作,我们的应用服务器已经是完全无状态的了,水平扩展时只需要添加机器而不需要改动任何一行代码。
转载于:https://my.oschina.net/u/1991646/blog/741631
JavaWeb: Redis存储Session方案相关推荐
- java redis 存session_JavaWeb: Redis存储Session方案
所有支持Servlet规范的容器都自带session管理,于是大多数人都使用HttpSession接口存放状态信息.事实上, servlet的session会使得应用服务器水平扩展变的非常困难. 使用 ...
- yii2设置session时间_关于 Swoft 2.0 版本用 Redis 存储 session 时配置问题
Swoft 2.0 在 session 配置上和 1.0 还是有一些不同地方,而关于这些在 github 上完全没有任何说明,甚至连文档也没有.经过逐步梳理源代码(其中要理解他的 "注解&q ...
- php ?redis,PHP使用Redis存储Session
对于大访问量的网站来说,会有许多的客户端和服务端建立链接,就会生成许多 Session 文件,由于 Session 文件是存储在硬盘上的,因此每次服务器去读取这些 Session 文件都要经过许多的 ...
- 单点登录Redis存储Session及SessionId问题说明与集群实战-4
现在就是要改造我们getUserInfo,因为我们不会再从session里面获取用户,首先我们要哪一个login_token,这个时候拿到loginToken,如果loginToken是empty的话 ...
- 单点登录Redis存储Session及SessionId问题说明与集群实战-3
那现在我们就是要把sessionID的login请求,我们再看一下redis,回到我们的代码,我们现在不请求localhost:8080了,我们要请求happymall.com,因为我们 已经把他配置 ...
- 单点登录Redis存储Session及SessionId问题说明与集群实战-1
断点已经到这儿了,sessionId我们看一下,sessionId是B218,我们把value copy一下 放到这里,然后让Redis存上,key就是session的id,value就是user,后 ...
- 单点登录Redis存储Session及Cookie场景介绍
首先response如果是成功的话,就是登陆成功,我就不往session里面放值了,直接调用RedisPoolUtil,setEx方法,在设置的时候,直接把他的时间加上,key就用session.ge ...
- 单点登录Redis存储Session及SessionId问题说明与集群实战-2
我们要写什么呢,我们要在服务端写一个cookie,而这个cookie呢,是写在客户端上的,那他写的就是登陆时候的,sessionId,非常简单,我们开始写一下,首先新建一个类,我们就在util里面创建 ...
- Asp.net Core 使用Redis存储Session
学习博客:http://www.cnblogs.com/hantianwei/p/5723959.html 转载于:https://www.cnblogs.com/jiangjing/p/584619 ...
最新文章
- SpringMVC深度探险(三) —— DispatcherServlet与初始化主线
- httping 2.2.1 发布,测试 HTTP 连接的工具
- Python读取Json字典写入Excel表格的方法
- P1357 花园 (矩阵快速幂+ DP)
- 前端学习(2217):react元素渲染之时钟
- 嵌入式操作系统_航天科工海鹰翼辉嵌入式操作系统获自主原创“身份证”
- c盘的Oracle文件删不了吗,oracle卸载不干净怎么办
- 小 M 的算式(dfs)
- Eureka安全访问
- 250个jquery 插件
- 如何重装win 10 系统
- main函数写法总结
- python 让电脑发出声音代码_python - 代码完成时发出声音警报
- 怎样用excel剔除异常数据_注意避坑 | 这10个错误的Excel使用方法别再用了!
- 如何撰写《软件项目方案文档》
- 怎么使用山东鼎信发送短信验证码
- 用python画篮球场_篮球场地最新标准尺寸
- 票房拐点之后的影院并购,继续“小而频”还是大洗牌
- vr授权服务器虚拟机,vm虚拟机上的连接远程服务器
- 用R语言画一朵玫瑰花