disconf-xml分散構成に基づくredisの管理


この文書では、disconfがredis(スタンドアロンおよびクラスタ)の構成をどのように管理するかについて説明します.
redis単機注意pom中のjedisのバージョンは2.4.2以下のバージョンでなければならない.そうしないと、新しいredis-singleを間違えて報告する.properties,内容:
# redis jedis version 2.4.2
redis.host=localhost
redis.port=6379
redis.password=
新規redis-single.xml,内容:
xml version="1.0" encoding="UTF-8"?>
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">

id="jedisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
p:host-name="${redis.host}" p:port="${redis.port}" p:password="${redis.password}"
p:use-pool="true" />

id="stringRedisSerializer"
class="org.springframework.data.redis.serializer.StringRedisSerializer" />

id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
p:connection-factory-ref="jedisConnectionFactory"
p:defaultSerializer-ref="stringRedisSerializer" />


ここでは主にspring data redisを用い,redisTemplateを注入するとspring dataパッケージapi を用いることができる.
redisクラスタは我々のredisが構築したのは実際のクラスタ(3.0以上のバージョンに基づく)であるが、現在spring data redisはまだredisのクラスタをサポートしていないため、原生のjedisを使用しなければならず、以下の
public class JedisClusterFactory implements FactoryBean, InitializingBean {

private JedisCluster jedisCluster;
private Integer timeout;
private String cluster;

private Set parseHostAndPort() {
String[] clusters = this.cluster.split(",");
Set haps = new HashSet();
for (String c : clusters) {
String[] ipAndPort = c.split(":");
HostAndPort hap = new HostAndPort(ipAndPort[0], Integer.parseInt(ipAndPort[1]));
haps.add(hap);
}
return haps;
}

@Override
public JedisCluster getObject() throws Exception {
return jedisCluster;
}

@Override
public Class> getObjectType() {
return (this.jedisCluster != null ? this.jedisCluster.getClass() : JedisCluster.class);
}

@Override
public boolean isSingleton() {
return true;
}

@Override
public void afterPropertiesSet() throws Exception {
Set haps = this.parseHostAndPort();
jedisCluster = new JedisCluster(haps, timeout);
}

public Integer getTimeout() {
return timeout;
}

public void setTimeout(Integer timeout) {
this.timeout = timeout;
}

public String getCluster() {
return cluster;
}

public void setCluster(String cluster) {
this.cluster = cluster;
}
}
, JedisCluster , GenericObjectPoolConfig
,pom jedis 2.7.2 , JedisCluster
の新しいredis-clusterを簡単なパッケージ化する必要がある.properties、内容は以下の通りです:
# redis jedis version 2.7.2
redis.cluster=192.168.88.140:6378,192.168.88.140:6379,192.168.88.143:6378,192.168.88.143:6379,192.168.88.145:6378,192.168.88.145:6379
redis.timeout=300000
redis-cluster.xml, :
xml version="1.0" encoding="UTF-8"?>
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">

id="jedisClusterFactory" class="xxx.disconf.demo.service.JedisClusterFactory">
name="cluster" value="${redis.cluster}" />
name="timeout" value="${redis.timeout}" />


それでは私達が使う時jedisClusterFactoryを注入して使うことができて、このbeanは比較的に軽くて、他のbeanに依存する必要はありませんので、前に述べたdisconfの中でredisの配置を修正した後に相応するjedisClusterFactoryも再びflushして新しいbean になります
参照先:
https://github.com/knightliao/disconf/wiki