Jedis cluster客户端使用

时间:2022-11-09 17:26:36

前言:

由于spring-data-redis不支持,redis集群的操作。所以更换客户端,使用Jedis cluster。

正文:

一.序言

     前面搭建了个3个msater-slave 的本地集群测试,这里用java 的客户端 进行一些简单测试,看看集群是否生效。

     redis client 推荐:http://redis.io/clients

     我使用的:https://github.com/xetorthio/jedis

 

二.测试

    maven:

    

Java代码  Jedis cluster客户端使用
  1. <dependency>  
  2.     <groupId>redis.clients</groupId>  
  3.     <artifactId>jedis</artifactId>  
  4.     <version>2.7.2</version>  
  5.     <type>jar</type>  
  6.     <scope>compile</scope>  
  7. </dependency>  

 

     

Java代码  Jedis cluster客户端使用
  1. @org.junit.Test  
  2. public  void cluster(){  
  3.     String key = "2";  
  4.     // 这东西 可以直接看到key 的分片数,就能知道放哪个 节点  
  5.     System.out.println(JedisClusterCRC16.getSlot(key));  
  6.     Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();  
  7.     jedisClusterNodes.add(new HostAndPort("127.0.0.1"7000));  
  8.     jedisClusterNodes.add(new HostAndPort("127.0.0.1"7001));  
  9.     jedisClusterNodes.add(new HostAndPort("127.0.0.1"7002));  
  10.     // 3个master 节点  
  11.     JedisCluster jc = new JedisCluster(jedisClusterNodes);  
  12.     System.out.println(jc.get(key));  
  13.     jc.setnx(key, "bar");  
  14.     String value = jc.get(key);  
  15.     System.out.println(value);  
  16. }  

   别人的例子,我测试:

   

Java代码  Jedis cluster客户端使用
  1. Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();  
  2.      jedisClusterNodes.add(new HostAndPort("127.0.0.1"7000));  
  3.      jedisClusterNodes.add(new HostAndPort("127.0.0.1"7001));  
  4.      jedisClusterNodes.add(new HostAndPort("127.0.0.1"7002));  
  5.      JedisCluster jc = new JedisCluster(jedisClusterNodes);  
  6.      for (int i = 1; i <= 10000; i++) {  
  7.          long start = System.currentTimeMillis();  
  8.          jc.set("k:" + i, "v" + i);  
  9.          System.out.print("set " + i +"th value in " + (System.currentTimeMillis() - start) + " ms");  
  10.          start = System.currentTimeMillis();  
  11.          jc.get("k:" + i);  
  12.          System.out.println(", get " + i +"th value in " + (System.currentTimeMillis() - start) + " ms");  
  13.      }  

   由于是本机 固态硬盘,速度 杠杆的。

    

 

 三.测试反馈: 

     1.集群正常,基本操作都OK

     2.如果某个master 挂了,比如7001, 集群依然可用,会存放到对应的salve 7004 上去。

     3.如果master -slave 都挂了,会导致 整个集群不可用,异常,因此最好配有M-S 的结构

     4.我默认配置,有rdb 和 aof  持久化,因此master 挂了,重启,数据可以从salve 上恢复

     5.存放的key 会根据返回的位置,放在不同的slot 上,实现均衡

 

小结:

      1.这里仅仅是最基本的配置,和简单测试

      2.如果配置文件以及更多命令得参考文档

         2.1 客户端命令:http://redis.io/topics/clients

         2.2 中文jredis API:http://www.360doc.com/content/15/0328/12/5054188_458684113.shtml  建议看源码用例

        2.3 redis.conf 中文(旧):http://www.cppblog.com/HappySky2046/archive/2014/06/18/207323.html

      

      3.如果前期负载不很大,可以开启持久化,毕竟集群 还不熟悉,如果负载高了,而且集群比较熟悉了,业务也不依赖的情况下,可以关闭,或者 适当调整,调整多看看 原理 和 配置文件说明 就行了。