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方案相关推荐

  1. java redis 存session_JavaWeb: Redis存储Session方案

    所有支持Servlet规范的容器都自带session管理,于是大多数人都使用HttpSession接口存放状态信息.事实上, servlet的session会使得应用服务器水平扩展变的非常困难. 使用 ...

  2. yii2设置session时间_关于 Swoft 2.0 版本用 Redis 存储 session 时配置问题

    Swoft 2.0 在 session 配置上和 1.0 还是有一些不同地方,而关于这些在 github 上完全没有任何说明,甚至连文档也没有.经过逐步梳理源代码(其中要理解他的 "注解&q ...

  3. php ?redis,PHP使用Redis存储Session

    对于大访问量的网站来说,会有许多的客户端和服务端建立链接,就会生成许多 Session 文件,由于 Session 文件是存储在硬盘上的,因此每次服务器去读取这些 Session 文件都要经过许多的 ...

  4. 单点登录Redis存储Session及SessionId问题说明与集群实战-4

    现在就是要改造我们getUserInfo,因为我们不会再从session里面获取用户,首先我们要哪一个login_token,这个时候拿到loginToken,如果loginToken是empty的话 ...

  5. 单点登录Redis存储Session及SessionId问题说明与集群实战-3

    那现在我们就是要把sessionID的login请求,我们再看一下redis,回到我们的代码,我们现在不请求localhost:8080了,我们要请求happymall.com,因为我们 已经把他配置 ...

  6. 单点登录Redis存储Session及SessionId问题说明与集群实战-1

    断点已经到这儿了,sessionId我们看一下,sessionId是B218,我们把value copy一下 放到这里,然后让Redis存上,key就是session的id,value就是user,后 ...

  7. 单点登录Redis存储Session及Cookie场景介绍

    首先response如果是成功的话,就是登陆成功,我就不往session里面放值了,直接调用RedisPoolUtil,setEx方法,在设置的时候,直接把他的时间加上,key就用session.ge ...

  8. 单点登录Redis存储Session及SessionId问题说明与集群实战-2

    我们要写什么呢,我们要在服务端写一个cookie,而这个cookie呢,是写在客户端上的,那他写的就是登陆时候的,sessionId,非常简单,我们开始写一下,首先新建一个类,我们就在util里面创建 ...

  9. Asp.net Core 使用Redis存储Session

    学习博客:http://www.cnblogs.com/hantianwei/p/5723959.html 转载于:https://www.cnblogs.com/jiangjing/p/584619 ...

最新文章

  1. SpringMVC深度探险(三) —— DispatcherServlet与初始化主线
  2. httping 2.2.1 发布,测试 HTTP 连接的工具
  3. Python读取Json字典写入Excel表格的方法
  4. P1357 花园 (矩阵快速幂+ DP)
  5. 前端学习(2217):react元素渲染之时钟
  6. 嵌入式操作系统_航天科工海鹰翼辉嵌入式操作系统获自主原创“身份证”
  7. c盘的Oracle文件删不了吗,oracle卸载不干净怎么办
  8. 小 M 的算式(dfs)
  9. Eureka安全访问
  10. 250个jquery 插件
  11. 如何重装win 10 系统
  12. main函数写法总结
  13. python 让电脑发出声音代码_python - 代码完成时发出声音警报
  14. 怎样用excel剔除异常数据_注意避坑 | 这10个错误的Excel使用方法别再用了!
  15. 如何撰写《软件项目方案文档》
  16. 怎么使用山东鼎信发送短信验证码
  17. 用python画篮球场_篮球场地最新标准尺寸
  18. 票房拐点之后的影院并购,继续“小而频”还是大洗牌
  19. vr授权服务器虚拟机,vm虚拟机上的连接远程服务器
  20. 用R语言画一朵玫瑰花

热门文章

  1. spring boot 初始化表
  2. [转]Python爬虫html解析工具beautifulSoup在pycharm中安装及失败的解决办法
  3. 实验五 burpsuite重放攻击实验
  4. MEF实现设计上的“松耦合”(一)
  5. 二分查找(递归和非递归实现)
  6. c# 操作word中在右下角插入图片
  7. 讓combobox也綁定數據表
  8. 高级JAVA - 动态代理的实现原理和源码分析
  9. JSON解析中获取不存在的key
  10. 2019百度之星 Polynomial