文档章节

JavaWeb: Redis存储Session方案

郁极风
 郁极风
发布于 2016/09/02 16:58
字数 618
阅读 190
收藏 3

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

本文转载自:http://blog.csdn.net/neosmith/article/details/50466367

郁极风
粉丝 8
博文 30
码字总数 8787
作品 0
长沙
项目经理
私信 提问
加载中

评论(1)

石家庄齐白石
石家庄齐白石
厉害了,我的哥
便宜有便宜的办法-小微企业云上的springboot集群方案2:session和redis

在谈到集群方案的时候,第一个会遇到的问题就是session问题,在单机上,session的问题从来都是web容器解决的,我们主要是用,但是集群意味着多容器。如果负载均衡是随机分配服务器访问的话,...

wphmoon
09/09
47
0
PHP中使用Redis接管文件存储Session详解

前言 php默认使用文件存储session,如果并发量大,效率会非常低。而redis对高并发的支持非常好,可以利用redis替换文件来存储session。 最近就遇到了这个问题,之前找了网上的一套直播系统给...

开元中国2015
2018/12/04
59
0
使用Tomcat-redis-session-manager来实现Tomcat集群部署中的Session共享

一、工作中因为要使用到Tomcat集群部署,此时就涉及到了Session共享问题,主要有三种解决方案:   1、使用数据库来存储Session   2、使用Cookie来存储Session   3、使用Redis来存储Ses...

凯文加内特
02/26
172
0
SESSION存储于redis(CI3)

CI3的Session的重大改变就是默认使用了原生的Session,这符合Session类库本来的意思,似乎更加合理一些。总体来说,虽然设计理念不同,但为了保证向后兼容性,类库的使用方法与CI2.0的差别不...

o0无忧亦无怖
2015/11/04
250
0
PHP 配置 Session存储方式 为Redis

Redis 如果配置了密码,/etc/redis.conf 中的 requirepass ,session 存储时会报错 方案:session.save_path = "tcp://127.0.0.1:6379?auth=authpass" 从Redis 中读取session key = "PHPRED......

指尖芳华
2018/04/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
6
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
4
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
7
0
从零基础到拿到网易Java实习offer,我做对了哪些事

作为一个非科班小白,我在读研期间基本是自学Java,从一开始几乎零基础,只有一点点数据结构和Java方面的基础,到最终获得网易游戏的Java实习offer,我大概用了半年左右的时间。本文将会讲到...

Java技术江湖
昨天
7
0
程序性能checklist

程序性能checklist

Moks角木
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部