JedisSentinelPool 配置文件设置

spring-mvc中通过JedisSentinelPool配置redis数据库.

1、配置单节点的reidis服务器
<beans>
    <!--配置 jedis pool-->
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <!-- 最大连接数 -->
        <property name="maxTotal" value="${redis.pool.maxTotal}"/>
        <!-- 最大空闲时间 -->
        <property name="maxIdle" value="${redis.pool.maxIdle}"/>
        <!-- 每次最大连接数 -->
        <property name="numTestsPerEvictionRun" value="${redis.pool.numTestsPerEvictionRun}"/>
        <!-- 释放扫描的扫描间隔 -->
        <property name="timeBetweenEvictionRunsMillis" value="${redis.pool.timeBetweenEvictionRunsMillis}"/>
        <!-- 连接的最小空闲时间 -->
        <property name="minEvictableIdleTimeMillis" value="${redis.pool.minEvictableIdleTimeMillis}"/>
        <!-- 连接控歘按时间多久后释放,当空闲时间>该值且空闲连接>最大空闲连接数时直接释放 -->
        <property name="softMinEvictableIdleTimeMillis" value="${redis.pool.softMinEvictableIdleTimeMillis}"/>
        <!-- 获得链接时的最大等待毫秒数,小于0:阻塞不确定时间,默认-1 -->
        <property name="maxWaitMillis" value="${redis.pool.maxWaitMillis}"/>
        <!-- 在获得链接的时候检查有效性,默认false -->
        <property name="testOnBorrow" value="${redis.pool.testOnBorrow}"/>
        <!-- 在空闲时检查有效性,默认false -->
        <property name="testWhileIdle" value="${redis.pool.testWhileIdle}"/>
        <!-- 连接耗尽时是否阻塞,false报异常,true阻塞超时 默认:true-->
        <property name="blockWhenExhausted" value="${redis.pool.blockWhenExhausted}"/>
    </bean>

    <!--配置单节点JedisConnectionFactory-->
    <bean id="jedisConnectionFactory"   class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
            <!-- redis服务器地址IP-->
            <property name="hostName" value="${redis.host1}" /> 
            <!-- redis服务器端口 默认是6379-->
            <property name="port" value="${redis.port1}" />
            <!-- 超时设置-->
            <property name="timeout" value="${redis.timeout}" />
            <!-- 如果redis配置了访问密码,请在这个设定访问密码-->
            <property name="password" value="${redis.password}" />
            <property name="poolConfig" ref="jedisPoolConfig" />
    </bean>

    <bean id="jedisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="jedisConnectionFactory" />  
    </bean>

    <bean id="redisCacheService" class=" com.can.core.service.RedisCacheService">
        <property name="redisTemplate" ref="jedisTemplate" />  
    </bean>
</beans>
2、配置主从配置的reidis服务器
同单节点配置相差不多,主要是jedisConnectionFactory中有所不同
注意:主从redis配置中从节点配置的并不是从redis的服务器信息,而是sentiles哨兵的配置信息
<!-- 这里配置主从节点 -->
<bean id="sentinelConfiguration" class="org.springframework.data.redis.connection.RedisSentinelConfiguration">  
        <property name="master">  
            <bean class="org.springframework.data.redis.connection.RedisNode"> 
                <!-- 这里填写主reids的机器名 -->
                <property name="name" value="${redis.host1.hostname}" /> 
            </bean>  
        </property>
        <property name="sentinels">  
            <!-- 这里配置哨兵 -->
            <set>  
                <bean class="org.springframework.data.redis.connection.RedisNode">  
                    <!-- 哨兵的服务器地址IP -->
                    <constructor-arg   value="${redis.host1.sentinels.host1}"></constructor-arg>  
                    <!-- 哨兵的服务器地址端口 默认是26379  -->
                    <constructor-arg   value="${redis.host1.sentinels.port1}"></constructor-arg>
                </bean>  
            </set> 
            <!-- 可以重复循环上面的节点,设置多个哨兵 --> 
        </property>  
    </bean>  

    <!--配置单节点JedisConnectionFactory-->
    <bean id="jedisConnectionFactory"   class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" >
            <property name="hostName" value="${redis.host1}" /> 
            <property name="port" value="${redis.port1}" />
            <property name="timeout" value="${redis.timeout}" />
            <property name="password" value="${redis.password}" />
            <!-- 这里引用的上面的主从节点 -->
            <constructor-arg  ref="sentinelConfiguration"  />  
            <constructor-arg   ref="jedisPoolConfig" />
    </bean>

    <bean id="jedisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="jedisConnectionFactory" />  
    </bean>

    <bean id="redisCacheService" class=" com.can.core.service.RedisCacheService">
        <property name="redisTemplate" ref="jedisTemplate" />  
    </bean>
总结:
第一次配置Jedis主从节点时特别容易将sentils配置成从节点的redis服务器信息,这样导致的后果运行的程序错误,提示“Cannot get master address from sentinel running @ 192.168..:6380. ”或者“All sentinels down, cannot determine where is master master is running“。猜测可能原因是Jedis执行了哨兵模式中sentinel get-master-addr-by-name 获取主redis信息导致的。我是在两台机器上分别配置了主redis和从redis,并在从redis服务器上设定了sentinel服务,在程序运行之前,请确保sentinel服务在运行,确保那个shell窗口没有关掉。
阅读更多
换一批

没有更多推荐了,返回首页