spring+redis+nginx 实现分布式session共享

1,spring 必须是4.3以上版本的

2,maven配置

  添加两个重要的依赖

  

<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>1.2.2.RELEASE</version>
<type>pom</type>
</dependency>

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>

3,spring.xml 文件配置
<!--分布式session-->
<bean id="redisHttpSessionConfiguration"
class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
<property name="maxInactiveIntervalInSeconds" value="600"/>
</bean>

<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="${jedis.pool.maxTotal}" />
<property name="maxIdle" value="${jedis.pool.maxIdle}" />
</bean>

<bean id="jedisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" destroy-method="destroy">
<property name="hostName" value="${redis.ip}"/>
<property name="port" value="${redis.port}"/>
<property name="password" value="${redis.password}" />
<property name="timeout" value="3000"/>
<property name="usePool" value="true"/>
<property name="poolConfig" ref="jedisPoolConfig"/>
</bean>

4,redis配置
#redis配置
#*****************jedisu8FDEu63A5u53C2u6570u8BBEu7F6E*********************#
#redisu670Du52A1u5668ip #
#redis.ip=47.92.128.123
redis.ip=192.168.9.168
#redisu670Du52A1u5668u7AEFu53E3u53F7#
redis.port=6379
redis.password=123456
#************************jedisu6C60u53C2u6570u8BBEu7F6E*******************#
#jedisu7684u6700u5927u5206u914Du5BF9u8C61#
jedis.pool.maxActive=3000
#jedisu6700u5927u4FDDu5B58idelu72B6u6001u5BF9u8C61u6570 #
jedis.pool.maxIdle=1000
#jedisu6C60u6CA1u6709u5BF9u8C61u8FD4u56DEu65F6uFF0Cu6700u5927u7B49u5F85u65F6u95F4 #
jedis.pool.maxTotal=1500
#jedisu8C03u7528borrowObjectu65B9u6CD5u65F6uFF0Cu662Fu5426u8FDBu884Cu6709u6548u68C0u67E5#
jedis.pool.testOnBorrow=true
#jedisu8C03u7528returnObjectu65B9u6CD5u65F6uFF0Cu662Fu5426u8FDBu884Cu6709u6548u68C0u67E5 #
jedis.pool.testOnReturn=true

5,web.xml 配置
<!--spring  redis  共享session 拦截器-->
<filter>
<filter-name>springSessionRepositoryFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSessionRepositoryFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

经过以上配置,就可以使用了
要想实现session共享还需要访问的时候域名一致,如果域名不一致是不能够共享的
例如 :
负载均衡两台服务器
A: 192.168.1.101 : 8080
B: 192.168.1.102 : 8081
在浏览器中分别用IP地址去访问两台服务器下的服务是不会实现session共享的
只有通过nginx做负载均衡两台服务器绑定同一域名如 www.test.com
通过域名去访问这时不管请求分发到哪一台机器都可以实现session的共享



原文地址:https://www.cnblogs.com/siashan/p/7575704.html