使用redis配置tomcat共享sessionjava
分布式web server集群部署后须要实现session共享,针对 tomcat 服务器的实现方案多种多样, 好比 tomcat cluster session 广播、nginx IP hash策略、nginx sticky module等方案, 本文主要介绍了使用 redis 服务器进行 session 统一存储管理的共享方案。
修改nginx conf配置文件加入nginx
upstream tomcat { server 200.10.10.67:8110; server 200.10.10.67:8120; server 200.10.10.44:8110; server 200.10.10.66:8110; }
配置 相应的server或者 location地址到 http://tomcatgit
添加redis session集群依赖的jar包到 TOMCAT_BASE/lib 目录下github
修改 TOMCAT_BASE/conf 目录下的 context.xml 文件web
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" /> <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager" host="localhost" port="6379" database="0" maxInactiveInterval="60" sessionPersistPolicies="PERSIST_POLICY_1,PERSIST_POLICY_2,.." sentinelMaster="SentinelMasterName" sentinels="sentinel-host-1:port,sentinel-host-2:port,.."/>
属性解释:redis
sessionPersistPolicies session保存策略,除了默认的策略还能够选择的策略有:数据库
[SAVE_ON_CHANGE]:每次 session.setAttribute() 、 session.removeAttribute() 触发都会保存. 注意:此功能没法检测已经存在redis的特定属性的变化, 权衡:这种策略会略微下降会话的性能,任何改变都会保存到redis中. [ALWAYS_SAVE_AFTER_REQUEST]: 每个request请求后都强制保存,不管是否检测到变化. 注意:对于更改一个已经存储在redis中的会话属性,该选项特别有用. 权衡:若是不是全部的request请求都要求改变会话属性的话不推荐使用,由于会增长并发竞争的状况。
jmxNamePrefix
* ****tomcat
重启tomcat,session存储便可生效服务器