spring集成 JedisCluster 联接 redis3.0 集群

来源:互联网 发布:建筑设计公司排名 知乎 编辑:程序博客网 时间:2024/06/06 11:00
spring集成 JedisCluster 连接 redis3.0 集群

最近在公司做了 jedisCluster整合spring 的配置, 分享如下

 

客户端采用最新的jedis 2.7

1.

maven依赖:

<dependency>

<groupId>redis.clients</groupId>

<artifactId>jedis</artifactId>

<version>2.7.2</version>

</dependency>

 

2.

增加spring 配置

<bean name="genericObjectPoolConfig" class="org.apache.commons.pool2.impl.GenericObjectPoolConfig" ><property name="maxWaitMillis" value="-1" /><property name="maxTotal" value="1000" /><property name="minIdle" value="8" /><property name="maxIdle" value="100" /></bean><bean id="jedisCluster" class="<span style="margin: 0px; padding: 0px;">xxx.JedisClusterFactory</span>"><property name="addressConfig"><value>classpath:connect-redis.properties</value></property><property name="addressKeyPrefix" value="address" />   <!--  属性文件里  key的前缀 --><property name="timeout" value="300000" /><property name="maxRedirections" value="6" /><property name="genericObjectPoolConfig" ref="genericObjectPoolConfig" /></bean>

 

3.

增加connect-redis.properties  配置文件

这里配置了6个节点

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

 

4.

增加java类:

import java.util.HashSet;import java.util.Properties;import java.util.Set;import java.util.regex.Pattern;import org.apache.commons.pool2.impl.GenericObjectPoolConfig;import org.springframework.beans.factory.FactoryBean;import org.springframework.beans.factory.InitializingBean;import org.springframework.core.io.Resource;import redis.clients.jedis.HostAndPort;import redis.clients.jedis.JedisCluster;public class JedisClusterFactory implements FactoryBean<JedisCluster>, InitializingBean {private Resource addressConfig;private String addressKeyPrefix ;private JedisCluster jedisCluster;private Integer timeout;private Integer maxRedirections;private GenericObjectPoolConfig genericObjectPoolConfig;private Pattern p = Pattern.compile("^.+[:]\\d{1,5}\\s*$");@Overridepublic JedisCluster getObject() throws Exception {return jedisCluster;}@Overridepublic Class<? extends JedisCluster> getObjectType() {return (this.jedisCluster != null ? this.jedisCluster.getClass() : JedisCluster.class);}@Overridepublic boolean isSingleton() {return true;}private Set<HostAndPort> parseHostAndPort() throws Exception {try {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(ipAndPort[0], Integer.parseInt(ipAndPort[1]));haps.add(hap);}return haps;} catch (IllegalArgumentException ex) {throw ex;} catch (Exception ex) {throw new Exception("解析 jedis 配置文件失败", ex);}}@Overridepublic void afterPropertiesSet() throws Exception {Set<HostAndPort> haps = this.parseHostAndPort();jedisCluster = new JedisCluster(haps, timeout, maxRedirections,genericObjectPoolConfig);}public void setAddressConfig(Resource addressConfig) {this.addressConfig = addressConfig;}public void setTimeout(int timeout) {this.timeout = timeout;}public void setMaxRedirections(int maxRedirections) {this.maxRedirections = maxRedirections;}public void setAddressKeyPrefix(String addressKeyPrefix) {this.addressKeyPrefix = addressKeyPrefix;}public void setGenericObjectPoolConfig(GenericObjectPoolConfig genericObjectPoolConfig) {this.genericObjectPoolConfig = genericObjectPoolConfig;}}

 

 

5.

到此配置完成

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

 

@Autowired

JedisCluster jedisCluster;

0 0
原创粉丝点击