SDR(spring.data.redis)与Sentinel高可用集群Redis客户端Jedis配置

来源:互联网 发布:客机纸模型图纸淘宝 编辑:程序博客网 时间:2024/05/16 18:20

依赖

 <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>3.8.1</version>      <scope>test</scope>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-test</artifactId>      <version>4.3.3.RELEASE</version>    </dependency>    <!--sdr-->    <dependency>      <groupId>org.springframework.data</groupId>      <artifactId>spring-data-redis</artifactId>      <version> 1.7.2.RELEASE</version>    </dependency>    <!--jedis-->    <dependency>      <groupId>redis.clients</groupId>      <artifactId>jedis</artifactId>      <version>2.9.0</version>    </dependency>

spring配置(redis.properties文件自行配置)

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">        <property name="locations">            <list>                <value>classpath*:redis.properties</value>            </list>        </property>    </bean>    <!-- redis属性配置 -->    <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}" />        <property name="maxWaitMillis" value="${redis.pool.maxWaitMillis}" />        <property name="testOnBorrow" value="${redis.pool.testOnBorrow}" />    </bean>    <!-- redis集群配置 哨兵架构 -->    <bean id="redisSentinelConfiguration" class="org.springframework.data.redis.connection.RedisSentinelConfiguration">        <property name="master">            <bean class="org.springframework.data.redis.connection.RedisNode">                <!--这个值要和Sentinel中指定的master的值一致,不然启动时找不到Sentinel会报错的-->                <property name="name" value="${redis.master.name}"></property>            </bean>        </property>        <!--记住了,这里是指定Sentinel的IP和端口-->        <property name="sentinels">            <set>                <bean class="org.springframework.data.redis.connection.RedisNode">                    <constructor-arg name="host" value="${redis.sentinel.host1}"></constructor-arg>                    <constructor-arg name="port" value="${redis.sentinel.port1}"></constructor-arg>                </bean>                <bean class="org.springframework.data.redis.connection.RedisNode">                    <constructor-arg name="host" value="${redis.sentinel.host2}"></constructor-arg>                    <constructor-arg name="port" value="${redis.sentinel.port2}"></constructor-arg>                </bean>            </set>        </property>    </bean>    <!--redis连接工厂-->    <bean id="redisConnectionFactory" class="org.springframework.data.redis.connection.jedis.RedisConnectionFactory">        <constructor-arg name="sentinelConfig" ref="redisSentinelConfiguration"></constructor-arg>        <constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>    </bean>    <!--redis模板-->    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">        <property name="connectionFactory" ref="redisConnectionFactory"></property>    </bean>

Test

JedisSentinel集群测试

JedisSentinel集群测试

/** * Author: Starry.Teng * Email: tengxing7452@163.com * Date: 17-8-14 * Time: 下午8:26 * Describe: Spring Jedis Sentinel 测试 */@RunWith(SpringRunner.class)@ContextConfiguration(locations = {"classpath:sentinel.xml"})public class SDRJedisSentinelTest {    @Test    public void sentinel(){        System.out.print("SpringJedisSentinel集群客户端测试成果");    }}

运行打印:

八月 15, 2017 6:59:25 下午 redis.clients.jedis.JedisSentinelPool initSentinels信息: Trying to find master from available Sentinels...八月 15, 2017 6:59:25 下午 redis.clients.jedis.JedisSentinelPool initSentinels信息: Redis master running at 127.0.0.1:8001, starting Sentinel listeners...八月 15, 2017 6:59:25 下午 redis.clients.jedis.JedisSentinelPool initPool信息: Created JedisPool to master at 127.0.0.1:8001SpringJedisSentinel集群客户端测试成果

tips:

  • 启动前应该保证redis集群服务器开启
  • 配合属性文件要正确
  • master-name必须与redis-sentinel中指定的一致

  • 笔者的redis.properties配置(仅供产考)github

原创粉丝点击