使用Jedis对RedisCluster的封装
Jedis的客户端使用JedisClueter对象
由于集群两两互连,可以通过任何一个节点来获取整个集群的信息,
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
.......
初始化结束
保存redis相关笔记