所有支持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的运维工作,我们的应用服务器已经是完全无状态的了,水平扩展时只需要添加机器而不需要改动任何一行代码。

java redis 存session_JavaWeb: Redis存储Session方案相关推荐

  1. JavaWeb: Redis存储Session方案

    2019独角兽企业重金招聘Python工程师标准>>> 所有支持Servlet规范的容器都自带session管理,于是大多数人都使用HttpSession接口存放状态信息.事实上, ...

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

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

  3. redis存10万条数据_redis如何存储数据

    飞天技术汇 | 阿里云Redis产品升级大全 阿里云Redis重磅产品升级:全球多活版.混合存储版.多线程性能增强版. 这期飞天技术汇你将看到 ● 企业如何实现业务快速全球化布局 ● 冷热数据如何分离 ...

  4. redis安装、持久化、数据类型、常用操作、操作键值、安全设置、慢查询日志、存储session、主从配置、集群介绍、集群搭建配置、集群操作,php安装redis扩展...

    21.9 redis介绍 21.10 redis安装 21.11 redis持久化 21.12 redis数据类型 21.13/21.14/21.15 redis常用操作 21.16 redis操作键 ...

  5. java分布式会话redis_详解springboot中redis的使用和分布式session共享问题

    对于分布式使用Nginx+Tomcat实现负载均衡,最常用的均衡算法有IP_Hash.轮训.根据权重.随机等.不管对于哪一种负载均衡算法,由于Nginx对不同的请求分发到某一个Tomcat,Tomca ...

  6. Java的List和Json转换以及StringRedisTemplate往redis存泛型对象

    List转Json List<User> user= new ArrayList(); String str = JSON.toJSONString(user); Json 转List方法 ...

  7. flask中的CBV , flask-session在redis中存储session , WTForms数据验证 , 偏函数 , 对象里的一些小知识...

    flask中的CBV , flask-session在redis中存储session , WTForms数据验证 , 偏函数 , 对象里的一些小知识 flask中的CBV写法 后端代码 # 导入vie ...

  8. redis/分布式文件存储系统/数据库 存储session,解决负载均衡集群中session不一致问题...

    先来说下session和cookie的异同 session和cookie不仅仅是一个存放在服务器端,一个存放在客户端那么笼统 session虽然存放在服务器端,但是也需要和客户端相互匹配,试想一个浏览 ...

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

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

最新文章

  1. 扑克牌排序_巧用扑克牌搞定孩子的数学思维启蒙,聪明的妈妈都在玩这样的游戏...
  2. Java单例模式双重检查锁定中volatile关键字的作用
  3. maven 父maven_Maven神秘化
  4. java后端工程师平时开发或多或少会用到eclipse,那么它有哪些快捷键呢
  5. java实现把数据写入到Excel并下载
  6. 分布式系统一致性协议--Paxos算法
  7. abview查找范例时说 NI服务器未定位 这是怎么回事?
  8. 蓝桥杯 ALGO-37 算法训练 Hankson的趣味题
  9. linux英特尔蓝牙驱动,IntelBluetoothFirmware 英特尔蓝牙驱动
  10. 微信H5 跳转小程序 (html版本)
  11. 00.Spring源码编译
  12. 个人喜欢的sublime主题Boxy
  13. 各类软件激活码(更新中)
  14. python获取电脑屏幕分辨率
  15. 特征点检测FAST算法
  16. Cannot find current proxy: Set ‘exposeProxy‘ property on Advised to ‘true‘ to make it available.
  17. 【PTA】PAT (Advanced Level) Practice 1011-1014
  18. Windows10系统Qt调试ffmpeg.c
  19. 系统——windows10专业工作站版简单优化
  20. WEB Workers 介绍

热门文章

  1. SgmlReader使用方法
  2. Moo.fx 超级轻量级的 javascript 特效库
  3. 如何去掉字符串最后的逗号?(亲测)
  4. windows下生成github ssh key详解
  5. Linux的find -print 和 -print0区别:换行不换行
  6. CRMEB支付状态未改变
  7. java中常用的定位方式有哪些_java-selenium八种元素定位方式
  8. python qq机器人框架有哪些_使用Python的Tornado框架实现一个简单的WebQQ机器人
  9. ECharts的点击事件
  10. 踩内存是什么意思啊_面试|搬了这么久的砖,居然还不知道什么“踩内存”