上一篇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,因此使用的时候还需要考虑。
?
原文:http://zk-chs.iteye.com/blog/2285794