[摘要:Redis+Tomcat完成session流程 1.客户端初次要求办事端 2.办事端发生session并set cookie相应给客户端 3.客户端再次要求办事端,会带上cookie 4.办事端依据cookie找到对应的session 完成思绪 如果咱们]git
Redis+Tomcat实现session流程github
1.客户端首次请求服务端web
2.服务端产生session并set cookie响应给客户端redis
3.客户端再次请求服务端,会带上cookieapache
4.服务端根据cookie找到对应的session浏览器
实现思路缓存
若是咱们要编写程序实现这个方案,须要解决如下问题:tomcat
1.session的安全性,即不容易被仿造。安全
2.session的惟一性,若是用tomcat产生session的策略,多台tomcat会产生的session会存在重复的可能。服务器
3.session的有效期维护,session会有个有效期,用户在这个时间内不访问系统,session将会失效,若是
用户一直访问,则要自动延长session有效期。
4.在集群session服务器中,要考虑负载均衡,这也是须要编写客户端代码的,在分布式session缓存中,
须要根据sessionId哈希分布,那么就和服务器个数进行了耦合,在添加和移除服务器的时候,将出现数
据不一致的问题 。
5.如何实现才能让应用程序改动最小,或者是不改动。
咱们能够选择本身写程序来实现以上功能,不过在这里我使用一个现成的框架,即tomcat-redis-session-manager
有时间并感兴趣的朋友,能够在这个基础上自行实现一个,这样更适合本身的项目。
服务器部署分布:
ha主机 192.168.1.227:80
ha备机 192.168.1.246:80
keepalived 主机 192.168.1.227
keepalived备机 192.168.1.246
web1 http://192.168.1.226:8888/login
web2 http://192.168.1.246:8888/login
redis主 192.168.1.245 6380
redis备
安装redis
主机和备机都安装redis
wget http://download.redis.io/releases/redis-2.8.5.tar.gz
解压:
tar xzf redis-2.8.5.tar.gz
cd redis-2.8.5
make
启动
src/redis-server redis.conf --port 6380 &
客户端登陆
src/redis-cli -p 6380
备机配置复制:
redis.conf文件中
添加
slaveof 192.168.1.245 6380
Tomcat配置
tomcat版本:7.0.61
相关jar包:
注意这里的jar包最好是按下面的版本,不然会出现jar包冲突的问题。
tomcat-redis-session-manager-1.1.jar
commons-pool-1.6.jar
jedis-2.1.0.jar
下载tomcat redis session manager
https://github.com/jcoleman/tomcat-redis-session-manager/downloads
下载 apache common pool
http://commons.apache.org/proper/commons-pool/download_pool.cgi
下载版本:tomcat-redis-session-manager-1.1
redis的jar包能够从maven中央仓库下载
将以上3个jar包放入tomcat/lib目录中
在tomcat context.xml中加入以下内容
启动tomcat,浏览器请求tomcat
http://192.168.1.226:8888/login/
登陆redis客户端,查看session
session已经被保存到redis
下面,咱们进行一项测试
测试流程:
1.先访问虚拟ip1.99的应用,获得sessionId
web服务器是226
2.而后将对应的tomcat停掉
3.刷新该应用,若sessionId未变,则表示redis保存session成功。
咱们发现web服务器变成了246,可是sessionId未发生变化
该方案将session集中保存在了redis服务器,并作了主备容灾,从必定程度上提升了系统的高可用,因为
redis是内存存储,访问效率较高,在性能上也是比较好的,可是本例中session不是分布式存储,所以当用户量
很是大,并发访问量很是高的时候,session服务器会成为性能瓶颈。