`

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;

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


相关推荐

    spring-session+spring+redis的依赖包

    本压缩包包含的“spring-session+spring+redis”组合,是将Spring Session与Redis集成,利用Redis作为会话存储介质,以实现高可用性和可扩展性。 首先,我们要了解Spring Session的核心概念。它通过替换默认的...

    spring redis session共享实现步骤

    需要注意的是,虽然文档中提到的配置可能只适用于非集群的Redis环境,但配置文件名为`spring-redis-cluster.xml`,这可能意味着配置也支持Redis集群。在集群环境中,需要配置多个节点,并可能使用Sentinel或Cluster...

    redis-session-manager-redis-session-manager-2.0.3.zip

    3. **可扩展性**:通过Redis集群,可以轻松扩展以应对高并发场景。 4. **跨服务器会话共享**:对于分布式应用,可以在多个服务器之间共享会话,提升用户体验。 5. **持久化**:Redis支持多种持久化策略,保证数据不...

    Spring Session + redis实现session共享

    5. **设置session超时时间**:可以在配置中设置session的过期时间,Spring Session默认的过期时间是30分钟。 6. **处理冲突**:由于多服务器可能同时修改同一session,需要处理可能出现的并发冲突。Spring Session...

    spring-session:spring session+redis实现分布式缓存

    2. **配置Spring Session**: 在Spring配置文件中启用Spring Session并指定Redis作为session存储。 ```xml &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...

    tomcat-redis-session需要的jar包

    注意,这只是一个基本的配置,实际部署时可能需要考虑更多因素,比如Redis的集群配置、session的过期策略、负载均衡等。在生产环境中,可能还需要监控Redis的性能和健康状况,以及处理可能出现的网络问题。此外,...

    spring4 session共享+redis

    在现代Web应用开发中,...通过以上步骤,你可以在Spring 4中成功实现基于Redis的session共享。这个解决方案对于需要在多台服务器之间共享用户状态的分布式系统非常实用。请根据实际情况调整配置,以适应你的项目需求。

    spring-session例子工程

    3. **启用 Spring Session**:在 Spring Boot 的主配置类上添加 `@EnableRedisHttpSession` 注解,这将启用 Redis 支持的 Session 管理: ```java @SpringBootApplication @EnableRedisHttpSession public class...

    Redis、springSession共享包

    - **扩展性**:随着用户量增加,可能需要考虑 Redis 集群配置,以提供高可用性和水平扩展性。 总的来说,Redis 和 SpringSession 结合使用可以提供一个健壮的分布式 Session 管理解决方案。通过将 Session 存储在 ...

    配置tomcat-redis-session共享架包

    在IT行业中,尤其是在Web服务开发...通过上述步骤,你可以成功地配置Tomcat与Redis之间的session共享,从而提高Web应用的可扩展性和可靠性。在实际应用中,理解并掌握这些知识点对于构建高可用的分布式系统至关重要。

    Spring Boot + Spring Session + Redis

    项目介绍.txt文件可能包含详细步骤,指导如何配置Spring Boot应用,集成Spring Session和Redis。通常,这包括以下几个关键步骤: 1. 添加相关依赖:在项目的pom.xml或build.gradle文件中,添加Spring Boot、Spring ...

    tomcat集群利用redis实现session共享所需jar包

    "tomcat7+redis实现session共享依赖jar包"正是为了解决这个问题,它包含了在Tomcat集群中通过Redis实现Session共享所需的所有关键组件。 首先,我们需要理解Session的基本概念。在Web应用中,Session是服务器端用来...

    tomcat7 集群通过redis共享session 所需jar包

    5. **配置步骤**: - **安装Redis**:首先,你需要在集群的所有节点上安装和配置Redis服务器。 - **添加依赖**:在`lib`目录下的jar包可能是实现Tomcat与Redis交互所需的库,例如`jedis.jar`(Jedis是Java客户端...

    nginx+tomcat+redis完成session共享

    你可以使用第三方库如`spring-session-data-redis`来简化这个过程。 3. **配置Nginx**:在Nginx配置文件中,设置负载均衡策略,例如轮询、最少连接数或根据session ID进行粘滞会话。使用`proxy_pass`指令将请求转发...

    tomcat基于redis实现session共享所依赖的jar包

    使用`tomcat-redis-session-manager`进行session共享的步骤大致如下: 1. 将该jar包添加到Tomcat的lib目录,或者如果是Spring Boot项目,则将其作为依赖加入到pom.xml或build.gradle文件中。 2. 配置Tomcat的...

    spring session入门

    3. 性能优化:监控Redis性能,考虑使用Redis集群以提高并发能力。 4. 集成测试:编写测试用例以验证会话在不同服务器间的正确同步。 通过以上步骤,你已成功入门Spring Session并实现了与Redis的整合。这只是一个...

    tomcat-redis配置session共享

    通过以上步骤,你已经成功配置了Tomcat和Redis,实现了Session在多个Tomcat实例间的共享,提升了系统的可扩展性和可用性。在后续的维护和优化过程中,继续关注性能、安全和用户体验,确保系统的稳定运行。

    spring4+redis3+nginx1实现tomcat集群session共享源码

    总结,本方案通过Spring Session结合Redis的持久化存储以及Nginx的负载均衡和粘滞会话策略,有效地解决了Tomcat集群环境下的Session共享问题,提高了应用的可用性和扩展性。对于需要处理高并发和大规模用户量的Web...

Global site tag (gtag.js) - Google Analytics