您的位置:首页 > 数据库 > Redis

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

2017-08-16 09:45 459 查看

依赖

<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:8001
SpringJedisSentinel集群客户端测试成果


tips:

启动前应该保证redis集群服务器开启

配合属性文件要正确

master-name必须与redis-sentinel中指定的一致

笔者的redis.properties配置(仅供产考)github
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: