使用Jedis对RedisCluster的封装

 Jedis的客户端使用JedisClueter对象

由于集群两两互连,可以通过任何一个节点来获取整个集群的信息,

JedisCluster封装了连接池和底层hash槽计算分片的方法,自带高可用的客户端功能

jedisCluster测试代码
    @Test
     public void test(){
         //收集节点信息,由于两两互联,只需要提供其中几个节点即可
         Set<HostAndPort> set=new HashSet<HostAndPort>();
         set.add(new HostAndPort("10.9.104.184", 8004));
         //由于jedisCluster创建了连接池 JedisPool
         GenericObjectPoolConfig config=
                 new GenericObjectPoolConfig();
         config.setMaxIdle(8);
         config.setMaxTotal(200);
         //利用set和config对象构造一个jedisCluster
         JedisCluster cluster=new JedisCluster(set, config);
         //调用api测试访问使用redis集群
         cluster.set("name", "王老师");//key-value
         System.out.println(cluster.get("name"));
     }
 

 

springboot整合这个对象(user,product)

在easymall-parent工程中实现版本管理
             <dependencyManagement>      
                 <dependencies>
                     <dependency>
                         <groupId>org.springframework.boot</groupId>
                         <artifactId>spring-boot-starter-redis</artifactId>
                         <version>1.4.7.RELEASE</version>
                     </dependency>
                 </dependencies>
             </dependencyManagement>

 

创建一个公用的系统redis-cluster

easymall-common-redis

完成对RedisCluster集群的封装

pom.xml

继承parent工程

让parent工程来控制版本

添加redis依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion><groupId>cn.wiscom</groupId>
   <artifactId>easymall-common-redis</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging><name>easymall-common-redis</name>
   <url>http://maven.apache.org</url><properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   </properties>
   <parent>
     <groupId>cn.wiscom</groupId>
     <artifactId>easymall-parent</artifactId>
     <version>0.0.1-SNAPSHOT</version>
   </parent>
   <dependencies>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
     </dependency>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-redis</artifactId>
     </dependency>
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>3.8.1</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
 </project>

 

src/main/java

cn.wiscom.redis.config
JedisClusterConfig.java
package cn.wiscom.redis.config;
 ​
 @Configuration
 @ConfigurationProperties(prefix="easymall.cluster")
 public class JedisClusterConfig {
     private List<String> nodes;
     private Integer maxTotal;
     private Integer maxIdle;
     private Integer minIdle;
     /*jedisCluster初始化方法
      */
     @Bean
     public JedisCluster initCluster(){
         //TODO 收集节点信息,配置对象,构造jedisCluster过程
         Set<HostAndPort> set=new HashSet<HostAndPort>();
         //nodes={"10.9.104.184:8000","10.9.104.184:8001"}
         for (String node : nodes) {
             //ip port node="10.9.104.184:8000"
             String hostIp=node.split(":")[0];
             int port=Integer.parseInt(node.split(":")[1]);
             set.add(new HostAndPort(hostIp, port));
         }
         //配置对象config
         GenericObjectPoolConfig config=
                 new GenericObjectPoolConfig();
         config.setMaxTotal(maxTotal);
         config.setMaxIdle(maxIdle);
         config.setMinIdle(minIdle);
         //构造JedisCluster
         return new JedisCluster(set, config);
     }
     
 }

 

jedisCluster的逻辑

初始化

根据提供的各种参数,初始化一个JedisCluster

创建一个JedisCluster对象

连接node

通过连接集群的节点使用cluster-nodes命令获取所有节点和槽的信息

利用收集的信息封装一个mapper对象

key:节点名称

value:连接池对象

例如

8000 -------- JedisPool8000

8001--------- JedisPool8001

.。。。

获取槽与节点的关系

举例

0 -– 5460

5461 -– 10922

10923--- 16383

0 ------ JedisPool8000

1 ------ JedisPool8000

......

5460 -----JedisPool8001

5461----- JedisPool8001

.......

初始化结束

 

posted @ 2021-03-18 16:09  minnersun  阅读(619)  评论(0编辑  收藏  举报