`

spring-session之4 redis集群配置

阅读更多

spring-session之4 redis集群配置

前文,我们 spring-session之3 redis配置参数配置, 我们可以配置简单的ip和port,但是生产环境,我们的redis是做了集群,肯定不是单点,此时就不能单单hostName 和 port了, 怎么办?

好,今天的目标是:

  1. 配置spring-session redis 集群

1. 我们原来的 redis data 配置

1.1. spring-redis.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:loxia="http://loxia.benjamin.cn/schema/core"
        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://loxia.benjamin.cn/schema/core http://loxia.benjamin.cn/schema/core/loxia-spring-ext.xsd
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd   
            ">

        <bean id="redisconfig" class="redis.clients.jedis.JedisPoolConfig">
            <property  name="maxActive" >
                <value type="long">#{redis['redis.MaxActive']}</value>
            </property>
            <property  name="maxIdle" >
                <value type="long">#{redis['redis.MaxIdle']}</value>
            </property>
            <property  name="maxWait">
                <value type="long">#{redis['redis.MaxWait']}</value>
            </property>
            <property  name="testOnBorrow" >
                <value type="boolean">true</value>
            </property>
            <property  name="testOnReturn" >
                <value type="boolean">true</value>
            </property>
        </bean>

        <bean id="jedisSentinelPool" class="redis.clients.jedis.JedisSentinelPool">
            <constructor-arg ref="redisconfig"></constructor-arg>

            <constructor-arg type="java.util.Set">
                <set>
                    <value>#{redis['redis.sentinel1']}</value>
                    <value>#{redis['redis.sentinel2']}</value>
                    <value>#{redis['redis.sentinel3']}</value>
                </set>

            </constructor-arg>

            <constructor-arg >
                <value>#{redis['redis.mastername']}</value>
            </constructor-arg>

        </bean>
    </beans>

1.2 redis.properties

    #A string containing whitespace or comma separated host or IP addresses and port numbers of the form "host:port host2:port" or "host:port, host2:port".
    redis.sentinel1=redis01.public.test.baozun.cn:26379
    redis.sentinel2=redis02.public.test.baozun.cn:26379
    redis.sentinel3=redis03.public.test.baozun.cn:26379

    redis.mastername=testenv

    redis.timeout=1000
    redis.MaxActive=50
    redis.MaxIdle=60000
    redis.MaxWait=5000

    ##这个是我们自定义的 key前缀, 以便用同一套redis集群,适应多个不同的商城
    redis.keystart=feilongdev

2.redis 集群配置

那么我们怎么使用上面的环境来配置我们的spring-session呢?

使用通过上述的参数表格, JedisPoolConfig 可以使用,但是没有 JedisSentinelPool参数

而 JedisShardInfo属性并不是list,只是 包含了jedis服务器的一些信息 ,咋整?

这时候,我们来看看 JedisConnectionFactory 构造函数:

可以看出 ,构造函数支持 RedisSentinelConfiguration 或者 RedisClusterConfiguration

此处的 JedisConnectionFactory 是 spring-data-redis 内容, 有兴趣的可以看看, 这里也有入门版的教程,参见使用Spring Data Redis操作Redis(一)

2.1 RedisSentinelConfiguration

我们先使用 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: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.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">
                <bean class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
                    <constructor-arg index="0" value="#{redis['redis.mastername']}" />
                    <constructor-arg index="1">
                        <set>
                            <value>#{redis['redis.sentinel1']}</value>
                            <value>#{redis['redis.sentinel2']}</value>
                            <value>#{redis['redis.sentinel3']}</value>
                        </set>
                    </constructor-arg>
                </bean>
            </constructor-arg>

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

    </beans>

启动应用

出现以下的错误

Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'maxActive' of bean class [redis.clients.jedis.JedisPoolConfig]: Bean property 'maxActive' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1044)
    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:904)
    at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:75)
    at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:57)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1452)
    ... 30 more

JedisPoolConfig 不支持 maxActive 属性了 see xetorthio/jedis#1031

好吧, 修改下配置 spring-session.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.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">
            <bean class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
                <constructor-arg index="0" value="#{redis['redis.mastername']}" />
                <constructor-arg index="1">
                    <set>
                        <value>#{redis['redis.sentinel1']}</value>
                        <value>#{redis['redis.sentinel2']}</value>
                        <value>#{redis['redis.sentinel3']}</value>
                    </set>
                </constructor-arg>
            </bean>
        </constructor-arg>

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

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

</beans>

redis.properties

    #A string containing whitespace or comma separated host or IP addresses and port numbers of the form "host:port host2:port" or "host:port, host2:port".
    redis.sentinel1=redis01.public.test.baozun.cn:26379
    redis.sentinel2=redis02.public.test.baozun.cn:26379
    redis.sentinel3=redis03.public.test.baozun.cn:26379

    redis.mastername=testenv

    redis.timeout=1000

    redis.MaxIdle=60000

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

    redis.keystart=gowilddev

启动

报了新错

    Caused by: redis.clients.jedis.exceptions.JedisDataException: ERR Unsupported CONFIG parameter: notify-keyspace-events
        at redis.clients.jedis.Protocol.processError(Protocol.java:117)
        at redis.clients.jedis.Protocol.process(Protocol.java:151)
        at redis.clients.jedis.Protocol.read(Protocol.java:205)
        at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:297)
        at redis.clients.jedis.Connection.getStatusCodeReply(Connection.java:196)
        at redis.clients.jedis.Jedis.configSet(Jedis.java:2612)
        at org.springframework.data.redis.connection.jedis.JedisConnection.setConfig(JedisConnection.java:633)
        ... 25 more

什么鬼,参见 ERR Unsupported CONFIG parameter: notify-keyspace-events

看来我是使用新的jedis 连接了老版本的redis集群

服务器上面的 redis 版本

找运维组重新搭建 redis新版本的集群环境

[vmuser@test01 ~]$ redis-cli --version
redis-cli 3.2.4

由于采用了新版的集群技术,所以我们只能使用 RedisClusterConfiguration

2.2 RedisClusterConfiguration

2.2.1 3主3从 Cluster服务端配置

我们先看看运维组兄弟配置的集群情况

[vmuser@test01 ~]$ /home/vmuser/redis-3.2.4/src/redis-trib.rb check 10.88.21.31:10000

可以看到是官网推荐的标准的 3主 3从 方案,参见 官方文档 http://redisdoc.com/topic/cluster-tutorial.html

master slave
10.88.21.31:10000 10.88.22.25:10001
10.88.22.25:10000 10.88.21.31:10002
10.88.21.31:10001 10.88.22.25:10002

2.2.2 spring配置

这时我们可以使用 org.springframework.data.redis.connection.RedisClusterConfiguration ,注意 since spring-data-redis 1.7

<?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">
            <bean class="org.springframework.data.redis.connection.RedisClusterConfiguration">
                <constructor-arg index="0">
                    <set>
                        <!-- slave -->
                        <!-- <value>10.88.22.25:10001</value>
                            <value>10.88.21.31:10002</value>
                            <value>10.88.22.25:10002</value> -->

                        <!-- master -->
                        <value>10.88.21.31:10000</value>
                        <value>10.88.22.25:10000</value>
                        <value>10.88.21.31:10001</value>
                    </set>
                </constructor-arg>

                <!-- 一般当此值设置过大时,容易报:Too many Cluster redirections -->
                <!-- <property name="maxRedirects">3</property> -->
            </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>

此时,我们仅需要配置 master 到 RedisClusterConfiguration 中,系统会自动分配

上面配置可以提取精炼到配置文件中

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

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

#redis.keystart=gowilddev

启动

成功没有报错

2.2.3 为什么标准的 3主 3从 方案,我们 clusterNodes 仅配置了 3个 master?

  1. 首先配置多个是为了防止单个节点挂掉,理论上只需要配置一个节点即可
  2. 至于为什么不配置slave节点,参见 https://github.com/spring-projects/spring-data-examples spring data 示例中也只配置了master

2.2.4 关于 RedisClusterConfiguration 中的 maxRedirects 属性

重试次数,在执行失败后,进行的重试次数,默认是5, 参见 https://www.zybuluo.com/SailorXiao/note/159072#解读

主要用于 org.springframework.data.redis.connection.jedis.JedisConnectionFactory.createCluster(RedisClusterConfiguration, GenericObjectPoolConfig)

构造 redis.clients.jedis.JedisCluster.JedisCluster(Set, int, int, GenericObjectPoolConfig) 使用的

源码:

    /**
     * Creates {@link JedisCluster} for given {@link RedisClusterConfiguration} and {@link GenericObjectPoolConfig}.
     * 
     * @param clusterConfig must not be {@literal null}.
     * @param poolConfig can be {@literal null}.
     * @return
     * @since 1.7
     */
    protected JedisCluster createCluster(RedisClusterConfiguration clusterConfig, GenericObjectPoolConfig poolConfig) {

        Assert.notNull("Cluster configuration must not be null!");

        Set<HostAndPort> hostAndPort = new HashSet<HostAndPort>();
        for (RedisNode node : clusterConfig.getClusterNodes()) {
            hostAndPort.add(new HostAndPort(node.getHost(), node.getPort()));
        }

        int redirects = clusterConfig.getMaxRedirects() != null ? clusterConfig.getMaxRedirects().intValue() : 5;

        if (StringUtils.hasText(getPassword())) {
            throw new IllegalArgumentException("Jedis does not support password protected Redis Cluster configurations!");
        }

        if (poolConfig != null) {
            return new JedisCluster(hostAndPort, timeout, redirects, poolConfig);
        }
        return new JedisCluster(hostAndPort, timeout, redirects, poolConfig);
    }

一般当此值设置过大时,容易报:Too many Cluster redirections

3.问题

3.1 spring-session>1.2.2.RELEASE 不兼容 spring-data-redis > 1.7.4.RELEASE

目前 spring-session 最新版本是 1.2.2.RELEASE,内置依赖 spring-data-redis 版本是 1.7.1.RELEASE
而目前 spring-data-redis 最新版本是 1.7.4.RELEASE

尝试升级 spring-data-redis>1.7.4.RELEASE 启动报异常

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionRedisTemplate' defined in class path resource [org/springframework/session/data/redis/config/annotation/web/http/RedisHttpSessionConfiguration.class]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.springframework.core.serializer.support.DeserializingConverter.<init>(Ljava/lang/ClassLoader;)V
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1514)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:191)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:921)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:864)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:779)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:817)
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:745)
    ... 38 more
Caused by: java.lang.NoSuchMethodError: org.springframework.core.serializer.support.DeserializingConverter.<init>(Ljava/lang/ClassLoader;)V
    at org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.<init>(JdkSerializationRedisSerializer.java:53)
    at org.springframework.data.redis.core.RedisTemplate.afterPropertiesSet(RedisTemplate.java:119)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1573)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1511)
    ... 49 more

4.参考

--to be continued

0
0
分享到:
评论

相关推荐

    spring-session+spring+redis的依赖包

    完成这些配置后,Spring Session会自动处理用户的会话数据,将其存储在Redis中,从而实现跨服务器的会话共享。当用户在不同服务器之间跳转时,会话数据仍然保持一致,提高了应用的可用性和用户体验。 总之,这个...

    spring Session与Redis的jar包

    3. **配置Spring Session**:在Spring Boot的主配置类中,使用`@EnableRedisHttpSession`注解启用Spring Session,并可以自定义Redis的配置,比如设置session的过期时间。 4. **替换默认的HttpSession**:Spring ...

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

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

    redis-session-manager-redis-session-manager-2.2.1.tar.gz

    5. **扩展性**:随着应用规模的增长,可以轻松扩展Redis集群,以处理更大的会话负载。 6. **易于集成**:通常,Redis Session Manager提供API或者中间件供Web应用开发者集成,与Spring、Node.js、PHP等常见Web框架...

    redis-session-manager-redis-session-manager-2.0.0.zip

    2. **高可用性**:由于Redis支持主从复制和集群模式,通过配置,可以实现session数据的冗余备份,确保服务不因单点故障而中断。 3. **高速访问**:Redis是内存数据库,对于读写操作响应极快,提升了Web应用的性能。 ...

    spring4 session共享+redis

    在Spring 4中,我们需要配置Spring Session以使用Redis作为存储。在你的`applicationContext.xml`或相关的配置文件中,添加以下配置: ```xml &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:...

    redis-session-manager-redis-session-manager-2.0.5.zip

    - 集成Redis Session Manager:在Web应用中引入Redis Session Manager的依赖,如Java应用可以使用Spring Session与Redis的集成。配置文件中指定Redis服务器地址、端口、数据库索引等信息,启用Redis作为Session存储...

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

    4. **Redis配置**: 需要在Spring配置中设置Redis连接信息,包括主机名、端口、密码等,以及定义session的过期策略。 **集成步骤** 1. **添加依赖**: 在项目中引入Spring Session和Spring Session Redis的相关依赖...

    spring redis session共享实现步骤

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

    Spring Session + redis实现session共享

    3. **配置Spring Session**:在Spring Boot的主配置类上添加@EnableRedisHttpSession注解,这将启用Redis作为session存储。 4. **定制session ID**:如果需要自定义session ID的生成策略,可以通过实现...

    扩展spring-data-redis适配redis 认证

    本文将深入探讨如何扩展Spring Data Redis以适配Redis认证,同时也会涉及使用Jedis连接工厂和Redis集群。 首先,让我们关注`ExtJedisConnectionFactory`这个类。在Spring Data Redis中,`JedisConnectionFactory`是...

    tomcat-redis-session需要的jar包

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

    spring-session-1.3.1.RELEASE.zip

    4. **性能优化**:针对大型高并发应用,Spring Session 1.3.1.RELEASE 版本可能进行了性能优化,比如减少不必要的网络通信,优化了数据存储和检索的算法,从而降低了系统负载。 5. **测试支持**:为了帮助开发者更...

    spring-session例子工程

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

    spring-session+spring的依赖包

    本项目是一个基于Spring Session和Redis Cluster的Java Maven演示应用,旨在展示如何实现基于Redis集群的session共享。 1. **Spring Session**: - Spring Session允许开发者在不同的服务器之间共享用户会话,这...

    spring-session

    配置 Spring Session 需要在 Spring Boot 应用中添加对应的依赖,并在配置文件中指定会话存储后端(如 Redis)。例如,对于 Redis,需要配置 Redis 连接信息,并启用 Spring Session 的 Redis 支持。 4. **使用 ...

    SpringSession+Redis实现Session共享案例

    - 对于大型系统,可以配置Redis集群以提高可用性和可扩展性。 - 可以通过设置合理的Session超时时间,避免无用的Session占用存储空间。 6. **监控与维护**: - 使用Redis监控工具(如Redis Commander、...

    Redis、springSession共享包

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

    springboot +shiro+redis实现session共享(方案二)1

    "Spring Boot + Shiro + Redis 实现 Session 共享方案二" 1. 概述 本文档旨在介绍如何使用 Spring Boot、Shiro 和 Redis 实现分布式 session 共享,以解决 Web 应用程序的登录 session 统一问题。 2. 相关依赖 ...

Global site tag (gtag.js) - Google Analytics