您的位置:首页 > 数据库 > Redis

spring集成 JedisCluster 连接 redis3.0 集群

2016-11-10 10:18 429 查看
原文:http://xyqck163.iteye.com/blog/2211108

客户端采用最新的jedis2.7

1.

maven依赖:

<dependency>

<groupId>redis.clients</groupId>

<artifactId>jedis</artifactId>

<version>2.7.2</version>

</dependency>

2.增加spring配置

<beanname="genericObjectPoolConfig"class="org.apache.commons.pool2.impl.GenericObjectPoolConfig">
<propertyname="maxWaitMillis"value="-1"/>
<propertyname="maxTotal"value="1000"/>
<propertyname="minIdle"value="8"/>
<propertyname="maxIdle"value="100"/>
</bean>

<beanid="jedisCluster"class="xxx.JedisClusterFactory">
<propertyname="addressConfig">
<value>classpath:connect-redis.properties</value>
</property>
<propertyname="addressKeyPrefix"value="address"/><!--属性文件里key的前缀-->

<propertyname="timeout"value="300000"/>
<propertyname="maxRedirections"value="6"/>
<propertyname="genericObjectPoolConfig"ref="genericObjectPoolConfig"/>
</bean>


3.增加connect-redis.properties配置文件,这里配置了6个节点

address1=172.16.23.27:6379
address2=172.16.23.27:6380
address3=172.16.23.27:6381
address4=172.16.23.27:6382
address5=172.16.23.27:6383
address6=172.16.23.27:6384

4.增加java类

packagecn.zsmy.palmdoctor.redis;

importjava.util.HashSet;
importjava.util.Properties;
importjava.util.Set;
importjava.util.regex.Pattern;

importorg.apache.commons.pool2.impl.GenericObjectPoolConfig;
importorg.springframework.beans.factory.FactoryBean;
importorg.springframework.beans.factory.InitializingBean;
importorg.springframework.core.io.Resource;

importredis.clients.jedis.HostAndPort;
importredis.clients.jedis.JedisCluster;

publicclassJedisClusterFactoryimplementsFactoryBean<JedisCluster>,InitializingBean{

privateResourceaddressConfig;
privateStringaddressKeyPrefix;
privateStringpassword;

privateJedisClusterjedisCluster;
privateIntegertimeout;
privateIntegermaxRedirections;
privateGenericObjectPoolConfiggenericObjectPoolConfig;

privatePatternp=Pattern.compile("^.+[:]\\d{1,5}\\s*$");

@Override
publicJedisClustergetObject()throwsException{
returnjedisCluster;
}

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

@Override
publicbooleanisSingleton(){
returntrue;
}

privateSet<HostAndPort>parseHostAndPort()throwsException{
try{
Propertiesprop=newProperties();
prop.load(this.addressConfig.getInputStream());

Set<HostAndPort>haps=newHashSet<HostAndPort>();
for(Objectkey:prop.keySet()){

if(!((String)key).startsWith(addressKeyPrefix)){
continue;
}

Stringval=(String)prop.get(key);

booleanisIpPort=p.matcher(val).matches();

if(!isIpPort){
thrownewIllegalArgumentException("ip或port不合法");
}
String[]ipAndPort=val.split(":");

HostAndPorthap=newHostAndPort(ipAndPort[0],Integer.parseInt(ipAndPort[1]));
haps.add(hap);
}

returnhaps;
}catch(IllegalArgumentExceptionex){
throwex;
}catch(Exceptionex){
thrownewException("解析jedis配置文件失败",ex);
}
}

@Override
publicvoidafterPropertiesSet()throwsException{
Set<HostAndPort>haps=this.parseHostAndPort();

//jedisCluster=newJedisCluster(haps,timeout,maxRedirections,genericObjectPoolConfig);
jedisCluster=newJedisCluster(haps,timeout,2000,maxRedirections,password,genericObjectPoolConfig);
}
publicvoidsetAddressConfig(ResourceaddressConfig){
this.addressConfig=addressConfig;
}

publicvoidsetTimeout(inttimeout){
this.timeout=timeout;
}

publicvoidsetMaxRedirections(intmaxRedirections){
this.maxRedirections=maxRedirections;
}

publicvoidsetAddressKeyPrefix(StringaddressKeyPrefix){
this.addressKeyPrefix=addressKeyPrefix;
}

publicvoidsetGenericObjectPoolConfig(GenericObjectPoolConfiggenericObjectPoolConfig){
this.genericObjectPoolConfig=genericObjectPoolConfig;
}

publicvoidsetPassword(Stringpassword){
this.password=password;
}

}

5.到此配置完成


使用时,直接注入即可,如下所示:


@Autowired


JedisClusterjedisCluster;


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: