jedis客户端连接redis cluster代码

上一篇redis中,讲解了redis cluster集群,但是却没有涉及到客户端代码,这次就一起来看下如何通过jedis使用redis cluster。

在此之前,需要说一个坑,上一篇中,我们将cluster中每个节点的ip:port配置成了如127.0.0.1:7000这样的形式。

但是,由于集群内部存取时,需要确定key所在的slot,一旦不是在我们登录的节点上,就会有内部转发,如下:

127.0.0.1:7000> set a 10
-> Redirected to slot [15495] located at 127.0.0.1:7003
OK
127.0.0.1:7003> get c
-> Redirected to slot [7365] located at 127.0.0.1:7001
"10"
127.0.0.1:7001>

可见,set之后我们的登录的redis地址成了127.0.0.1:7003,当我们进行远程操作时,便会发生"Connection refused"错误。所以,我们需要将节点配置成192.168.xx.xx:port这样的形式才行。

spring对于redis cluster的支持目前在spring-data-redis-1.7.0RC1中,不知道离发布还有多久,需要的朋友可以从spring-data-redis文档先用着。

为了代码方便,就不采用xml和properties文件了,首先添加jedis的jar:

// pom.xml
<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>2.8.1</version>
</dependency>

由于我们都用spring开发,那么便需要配置bean:

@Configuration
public class RedisConfig {

    @Bean
    public JedisCluster jedisCluster (){
        Set<HostAndPort> set = new HashSet<>();
        set.add(new HostAndPort("192.168.0.21", 7001));
        set.add(new HostAndPort("192.168.0.21", 7002));
        set.add(new HostAndPort("192.168.0.21", 7003));
        set.add(new HostAndPort("192.168.0.21", 7004));
        JedisCluster jedisCluster = new JedisCluster(set);
        return jedisCluster;
    }

}

我们并不需要配置这么多节点,1个就可以,这里是为了防止个别节点挂掉。

对于JedisCluster的bean,大家可以通过properties和xml文件配置,为了方便阅读,这里就不用了(⁄ ⁄•⁄ω⁄•⁄ ⁄)

以上,一个简单的jedis连接redis cluster客户端就完成了。

下面可以测试一下:

@Configuration
@ComponentScan(basePackages = "config") // RedisConfig所在package
public class RedisClusterTest {

	@Test
	public void testCluster (){
		ApplicationContext ctx = new AnnotationConfigApplicationContext(RedisClusterTest.class);
		JedisCluster jedisCluster = ctx.getBean(JedisCluster.class);
		jedisCluster.set("redisCluster4Test", "2016-3-22");
		String value = jedisCluster.get("redisCluster4Test");
		System.out.println(value);
	}
	
}

运行后输出 2016-3-22,至此就完成了客户端的基本要求。

关于jedis的更多操作,网上有很多,只要对redis的操作足够熟悉,通过方法名大家就能知道对应的操作。

另外,对于redis-trib.rb,它建立cluster时并没有为我们提供password的功能,所以,你的集群节点不能有password,因此使用的时候还需要考虑。

猜你喜欢

转载自zk-chs.iteye.com/blog/2285794