JavaWeb: Redis存储Session方案
来源:互联网 发布:索尼 网络授权经销商 编辑:程序博客网 时间:2024/06/05 18:33
所有支持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的运维工作,我们的应用服务器已经是完全无状态的了,水平扩展时只需要添加机器而不需要改动任何一行代码。
- JavaWeb: Redis存储Session方案
- 【JavaWeb】Redis存储Session方案
- Redis存储Session方案
- 分布式Session存储方案
- 分布式Session存储方案
- Redis 存储方案
- Session存储到Redis
- Tomcat7+Redis存储Session
- 使用redis存储session
- Tomcat7+Redis存储Session
- Tomcat7+Redis存储Session
- php Redis存储Session
- Tomcat7+Redis存储Session
- Session存储到Redis
- Tomcat7+Redis存储Session
- Tomcat7+Redis存储Session
- redis存储session
- tomcat7.0.63 (redis session方案)
- mysql学习之触发器
- 黑马程序员_打印流和序列流
- 跟我学习dubbo-使用Maven构建Dubbo服务的可执行jar包(4)
- [Machine Learning] Generative learning algorithm-GDA and NB
- jQuery Getting Started
- JavaWeb: Redis存储Session方案
- 黑马程序员_文件的分割和合并
- C++ Overloading (Operator and Function)
- C++ function overriding
- Memory Layout of C programs
- 结构体中的 char *name & char name[20]
- Memory : Stack vs Heap
- 黑马程序员_IO流(对象的序列化和反序列化)
- 事件篮方法 - 如何管理好自己的时间