session+spring+redis实现分布式session共享,实测通过

  一、引入maven依赖,项目spring是4.1.5,需要兼容,否则报错,

  <spring.version>4.1.5.RELEASE</spring.version>

<!-- 使用redis存储session -->
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
    <version>1.1.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session</artifactId>
    <version>1.1.1.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.7.2.RELEASE</version>
    <!-- <version>1.6.6.RELEASE</version> --><!-- 1.7以下不支持集群 -->
</dependency>
		
<dependency>
    <groupId>commons-pool</groupId>
    <artifactId>commons-pool</artifactId>
    <version>1.2</version>
    <exclusions>
    	<exclusion>  
              <groupId>xerces</groupId>  
      	      <artifactId>xerces</artifactId>  
       	</exclusion>  
       	<exclusion>
       	      <groupId>xml-apis</groupId>
     	      <artifactId>xml-apis</artifactId>
     	</exclusion>
     </exclusions>
</dependency>

 

 

二、web.xml增加过滤器,放在最前面

<!-- 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>

 

三、配置spring-session.xml:

单机版redis:

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
   
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="10"/><!-- 最大空闲连接数, 默认8个 -->
        <property name="maxTotal" value="20"/><!-- 最大连接数, 默认8个 -->
        <property name="blockWhenExhausted" value="true"/><!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
        <property name="maxWaitMillis" value="1000"/><!-- 获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,  默认-1 -->
        <property name="testOnBorrow" value="true"/><!-- 在获取连接的时候检查有效性, 默认false -->
    </bean>
   
    <!-- redis连接配置,依次为主机ip,端口,密码,是否使用池,连接池配置引用 -->
    <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
        p:host-name="127.0.0.1" p:port="6379" p:usePool="true" p:pool-config-ref="jedisPoolConfig">
    </bean>
   
    <!-- 配置spring-session -->
    <bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
        <!-- session过期时间,单位是秒 -->
        <property name="maxInactiveIntervalInSeconds" value="30"></property>
    </bean>
</beans>

集群:

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
   
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxIdle" value="10"/><!-- 最大空闲连接数, 默认8个 -->
        <property name="maxTotal" value="20"/><!-- 最大连接数, 默认8个 -->
        <property name="blockWhenExhausted" value="true"/><!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
        <property name="maxWaitMillis" value="1000"/><!-- 获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,  默认-1 -->
        <property name="testOnBorrow" value="true"/><!-- 在获取连接的时候检查有效性, 默认false -->
    </bean>
   
    <!-- redis连接配置,依次为主机ip,端口,密码,是否使用池,连接池配置引用 -->
    <!-- <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
        p:host-name="127.0.0.1" p:port="6379" p:usePool="true" p:pool-config-ref="jedisPoolConfig">
    </bean> -->
      
      <!-- notify-keyspace-events Exg 使用集群必须设置redis的配置文件 -->
      <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
            <!-- Redis-CLuster  -->
            <constructor-arg index="0" ref="redisClusterConfig"/>
            <!-- 配置Redis连接池 ,可以不配置,使用默认就行!  -->
            <constructor-arg index="1" ref="jedisPoolConfig"/>
    </bean>
      <bean id="redisClusterConfig"
            class="org.springframework.data.redis.connection.RedisClusterConfiguration">
            <property name="maxRedirects" value="3" />
            <property name="clusterNodes">
                  <set>
                        <bean id="cluster0" class="org.springframework.data.redis.connection.RedisNode">
                              <constructor-arg value="12.3.11.155" />
                              <constructor-arg type="int" value="7001" />
                        </bean>
                        <bean id="cluster1" class="org.springframework.data.redis.connection.RedisNode">
                              <constructor-arg name="host" value="12.3.11.155" />
                              <constructor-arg name="port" value="7002" />
                        </bean>
                        <bean id="cluster2" class="org.springframework.data.redis.connection.RedisNode">
                              <constructor-arg name="host" value="12.3.11.155" />
                              <constructor-arg name="port" value="7003" />
                        </bean>
                        <bean id="cluster3" class="org.springframework.data.redis.connection.RedisNode">
                              <constructor-arg name="host" value="12.3.11.155" />
                              <constructor-arg name="port" value="7004" />
                        </bean>
                        <bean id="cluster4" class="org.springframework.data.redis.connection.RedisNode">
                              <constructor-arg name="host" value="12.3.11.155" />
                              <constructor-arg name="port" value="7005" />
                        </bean>
                        <bean id="cluster5" class="org.springframework.data.redis.connection.RedisNode">
                              <constructor-arg name="host" value="12.3.11.155" />
                              <constructor-arg name="port" value="7006" />
                        </bean>
                  </set>
            </property>
      </bean>
     <!-- 让Spring Session不再执行config命令 -->
<!--     <util:constant static-field="org.springframework.session.data.redis.config.ConfigureRedisAction.NO_OP"/>
 -->    
    
    
   
    <!-- 配置spring-session -->
    <bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
        <!-- session过期时间,单位是秒 -->
        <property name="maxInactiveIntervalInSeconds" value="30"></property>
    </bean>
</beans>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值