# tomcat-redis-session-manager > 使用redis配置tomcat共享session ### 结构图: ### 分析: 分布式web server集群部署后需要实现session共享,针对 tomcat 服务器的实现方案多种多样, 比如 tomcat cluster session 广播、nginx IP hash策略、nginx sticky module等方案, 本文主要介绍了使用 redis 服务器进行 session 统一存储管理的共享方案。 ### 必要环境: * java1.7 * tomcat7 * redis2.8 ## nginx 负载均衡配置 1. 修改nginx conf配置文件加入 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; } 2. 配置 相应的server或者 location地址到 http://tomcat ## tomcat session共享配置步骤 1. 添加redis session集群依赖的jar包到 TOMCAT_BASE/lib 目录下 * tomcat-redis-session-manager-2.0.0.jar * jedis-2.5.2.jar * commons-pool2-2.2.jar 2. 修改 TOMCAT_BASE/conf 目录下的 context.xml 文件 属性解释: * **host** redis服务器地址 * **port** redis服务器的端口号 * **database** 要使用的redis数据库索引 * **maxInactiveInterval** session最大空闲超时时间,如果不填则使用tomcat的超时时长,一般tomcat默认为1800 即半个小时 * **sessionPersistPolicies** session保存策略,除了默认的策略还可以选择的策略有: [SAVE_ON_CHANGE]:每次 session.setAttribute() 、 session.removeAttribute() 触发都会保存. 注意:此功能无法检测已经存在redis的特定属性的变化, 权衡:这种策略会略微降低会话的性能,任何改变都会保存到redis中. [ALWAYS_SAVE_AFTER_REQUEST]: 每一个request请求后都强制保存,无论是否检测到变化. 注意:对于更改一个已经存储在redis中的会话属性,该选项特别有用. 权衡:如果不是所有的request请求都要求改变会话属性的话不推荐使用,因为会增加并发竞争的情况。 * **sentinelMaster** redis集群主节点名称(Redis集群是以分片(Sharding)加主从的方式搭建,满足可扩展性的要求) * **sentinels** redis集群列表配置(类似zookeeper,通过多个Sentinel来提高系统的可用性) * **connectionPoolMaxTotal** * **connectionPoolMaxIdle** jedis最大能够保持idel状态的连接数 * **connectionPoolMinIdle** 与connectionPoolMaxIdle相反 * **maxWaitMillis** jedis池没有对象返回时,最大等待时间 * **minEvictableIdleTimeMillis** * **softMinEvictableIdleTimeMillis** * **numTestsPerEvictionRun** * **testOnCreate** * **testOnBorrow** jedis调用borrowObject方法时,是否进行有效检查 * **testOnReturn** jedis调用returnObject方法时,是否进行有效检查 * **testWhileIdle** * **timeBetweenEvictionRunsMillis** * **evictionPolicyClassName** * **blockWhenExhausted** * **jmxEnabled** * **jmxNameBase** * **jmxNamePrefix** * **** 3. 重启tomcat,session存储即可生效