`

spring-session之5 redis集群配置步骤总结

阅读更多

spring-session之5 redis集群配置步骤总结

前文,我们讲了那么多,都是一步一步调试过来的,为了更好的前进,现在我们先总结下配置步骤

好,今天的目标是:

  1. 总结配置步骤

简单四步,开始 spring-session redis 配置人生

1. pom.xml 添加 jar依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    ....

    <properties>
        <version.spring-session>1.2.2.RELEASE</version.spring-session>
        <!--不兼容 1.7.4.RELEASE -->
        <version.spring-data-redis>1.7.1.RELEASE</version.spring-data-redis>

    </properties>

    <dependencies>

        ....

        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session</artifactId>
            <version>${version.spring-session}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
            <version>${version.spring-session}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>${version.spring-data-redis}</version>
        </dependency> 

        ....

    </dependencies>

</project>

2. web.xml 添加 springSessionRepositoryFilter 配置

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

        ...

        <!-- spring-session config -->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                classpath*:spring-session-cluster.xml
            </param-value>
        </context-param>

        <!-- 这个filter 要放在第一个 -->
        <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>
            <dispatcher>REQUEST</dispatcher>
            <dispatcher>ERROR</dispatcher>
        </filter-mapping>
        ...
    </web-app>

3. spring-session-cluster.xml

    <?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:context="http://www.springframework.org/schema/context"
        xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd   
            ">

        <context:annotation-config />

        <util:properties id="redis" location="classpath:redis-cluster.properties"></util:properties>

        <!-- RedisHttpSessionConfiguration -->
        <bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration" />

        <!--JedisConnectionFactory -->
        <bean class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
            <constructor-arg index="0">
                <!-- since spring-data-redis 1.7 -->
                <bean class="org.springframework.data.redis.connection.RedisClusterConfiguration">
                    <constructor-arg index="0">
                        <set>
                            <value>#{redis['redis.redisClusterConfiguration.clusters']}</value>
                        </set>
                    </constructor-arg>

                    <!--
                        用于 redis.clients.jedis.JedisCluster.JedisCluster(Set<HostAndPort>, int, int, GenericObjectPoolConfig) 第三个参数 maxRedirections
                        默认值是5
                        一般当此值设置过大时,容易报:Too many Cluster redirections
                    -->
                    <property name="maxRedirects" value="#{redis['redis.redisClusterConfiguration.maxRedirects']}" />
                </bean>
            </constructor-arg>

            <constructor-arg index="1">
                <bean class="redis.clients.jedis.JedisPoolConfig">
                    <property name="maxIdle" value="#{redis['redis.jedisPoolConfig.MaxIdle']}" />
                    <property name="testOnBorrow" value="#{redis['redis.jedisPoolConfig.testOnBorrow']}" />
                    <property name="testOnReturn" value="#{redis['redis.jedisPoolConfig.testOnReturn']}" />

                    <!-- 新版jedis 不支持这个参数了 -->
                    <!-- <property name="maxWait" value="#{redis['redis.jedisPoolConfig.MaxWait']}" /> -->
                    <!-- <property name="maxActive" value="#{redis['redis.jedisPoolConfig.MaxActive']}" /> -->
                </bean>
            </constructor-arg>
        </bean>

    </beans>

4. redis-cluster.properties

    #############for org.springframework.data.redis.connection.RedisClusterConfiguration###################
    #只需要配置 master
    #理论上只需要配置一个节点即可,配置多个是为了防止单个节点挂掉,
    redis.redisClusterConfiguration.clusters=10.88.21.31:10000,10.88.22.25:10000,10.88.21.31:10001

    #用于 redis.clients.jedis.JedisCluster.JedisCluster(Set<HostAndPort>, int, int, GenericObjectPoolConfig) 第三个参数 maxRedirections
    #默认值是5
    #一般当此值设置过大时,容易报:Too many Cluster redirections
    redis.redisClusterConfiguration.maxRedirects=3

    ###########for redis.clients.jedis.JedisPoolConfig##############################

    redis.jedisPoolConfig.MaxIdle=60000
    redis.jedisPoolConfig.testOnBorrow=true
    redis.jedisPoolConfig.testOnReturn=true

    #新版jedis 不支持这个参数了
    #redis.jedisPoolConfig.MaxActive=50
    #redis.jedisPoolConfig.MaxWait=5000

简单四步,开始 spring-session redis 配置人生

--to be continued

0
0
分享到:
评论
2 楼 飞天奔月 2016-10-24  
Comven_eye 写道
首先,给楼主点个赞 ,我本人很懒不喜欢看源码,之前搜索了很久,也没有搜索到如此详细的spring-session的使用案例,东拼西凑自己的项目中也在用最简单的打个redis的情况,楼主这个写的比较全面,学习了。
其次,我有点疑问,关于JedisPoolConfig的配置问题,我看到楼主配置的maxIdle参数是60000,看这个样子,这个参数的单位应该是毫秒了是吧?我以前项目的配置里面此参数配置的是一个很小的值5,然后我点开源码发现在其父类GenericObjectPoolConfig中,有个默认的值
public class GenericObjectPoolConfig extends BaseObjectPoolConfig {
    public static final int DEFAULT_MAX_TOTAL = 8;
    public static final int DEFAULT_MAX_IDLE = 8;
    public static final int DEFAULT_MIN_IDLE = 0;
    private int maxTotal = 8;
    private int maxIdle = 8;
    private int minIdle = 0;

请楼主看一下,这个值我一直不确定到底是空闲时间还是空闲连接数,请楼主帮忙解答。




谢谢

是我写错了

这个参数是 最大空闲连接数

//最大空闲连接数, 默认8个
config.setMaxIdle(8);


参见
http://www.cnblogs.com/tankaixiong/p/4048167.html
1 楼 Comven_eye 2016-10-14  
首先,给楼主点个赞 ,我本人很懒不喜欢看源码,之前搜索了很久,也没有搜索到如此详细的spring-session的使用案例,东拼西凑自己的项目中也在用最简单的打个redis的情况,楼主这个写的比较全面,学习了。
其次,我有点疑问,关于JedisPoolConfig的配置问题,我看到楼主配置的maxIdle参数是60000,看这个样子,这个参数的单位应该是毫秒了是吧?我以前项目的配置里面此参数配置的是一个很小的值5,然后我点开源码发现在其父类GenericObjectPoolConfig中,有个默认的值
public class GenericObjectPoolConfig extends BaseObjectPoolConfig {
    public static final int DEFAULT_MAX_TOTAL = 8;
    public static final int DEFAULT_MAX_IDLE = 8;
    public static final int DEFAULT_MIN_IDLE = 0;
    private int maxTotal = 8;
    private int maxIdle = 8;
    private int minIdle = 0;

请楼主看一下,这个值我一直不确定到底是空闲时间还是空闲连接数,请楼主帮忙解答。


相关推荐

Global site tag (gtag.js) - Google Analytics