redis集群环境,客户端使用JedisCluster获取连接并操作redis服务,上一篇 分布式缓存技术redis学习系列(七)——spring整合jediscluster 简单介绍了spring使用JedisCluster,这篇从JedisCluster源码层面看看是如何使用。
一、集群初始化
1、从单元测试开始,代码如下:
@Autowired
private JedisCluster jedisCluster;
@Test
public void testJedisCluster(){
jedisCluster.set("name", "啊芝");
String val = jedisCluster.get("name");
System.out.println(val);
}
2、在单元测试中我们注入了JedisCluster jedisCluster,它来源于spring配置文件对其的注册:
<bean id="jedisCluster" class="com.jsun.service.redis.impl.JedisClusterFactory">
<property name="addressConfig">
<value>classpath:redis.properties</value>
</property>
<property name="addressKeyPrefix" value="cluster" /> <!-- 属性文件里 key的前缀 -->
<property name="timeout" value="300000" />
<property name="maxRedirections" value="6" />
<property name="genericObjectPoolConfig" ref="genericObjectPoolConfig" />
</bean>
3、JedisClusterFactory:
它实现了InitializingBean接口,重写了afterPropertiesSet()方法,当JedisClusterFactory Bean被注册之后,此方法被调用,它里面调用parseHostAndPort()方法,具体代码如下:
@Override
public void afterPropertiesSet() throws Exception {
//拿到所有节点配置
Set<HostAndPort> haps = this.parseHostAndPort();
//初始化集群
jedisCluster = new JedisCluster(haps, timeout, maxRedirections,genericObjectPoolConfig);
}
private Set<HostAndPort> parseHostAndPort() throws Exception {
try {
//读取配置文件,即redis.properties,把配置的节点全部存放入Set<HostAndPort> haps里面返回
Properties prop = new Properties();
prop.load(this.addressConfig.getInputStream());
Set<HostAndPort> haps = new HashSet<HostAndPort>();
for (Object key : prop.keySet()) {
if (!((String) key).startsWith(addressKeyPrefix)) {
continue;
}
String val = (String) prop.get(key);
boolean isIpPort = p.matcher(val).matches();
if (!isIpPort) {
throw new IllegalArgumentException("ip 或 port 不合法");
}
String[] ipAndPort = val.split(":");
HostAndPort hap = new HostAndPort(