1. 程式人生 > >spring整合 JedisCluster 連線 redis3.0 叢集

spring整合 JedisCluster 連線 redis3.0 叢集

maven依賴:

<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>2.8.0</version>
</dependency>

增加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="xxx.JedisClusterFactory">  
    <property name="timeout" value="300000" />  
    <property name="maxRedirections" value="6" />
     <property name="clusterList" value="172.16.23.27:6379,172.16.23.27:6380" />
    <property name="genericObjectPoolConfig" ref="genericObjectPoolConfig" />
</bean> 

增加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 JedisCluster jedisCluster;  
    private Integer timeout;  
    private Integer maxRedirections;  
    private GenericObjectPoolConfig genericObjectPoolConfig;  
    private String clusterList;
  
    @Override  
    public JedisCluster getObject() throws Exception {  
        return jedisCluster;  
    }  
  
    @Override  
    public Class<? extends JedisCluster> getObjectType() {  
        return (this.jedisCluster != null ? this.jedisCluster.getClass() : JedisCluster.class);  
    }  
  
    @Override  
    public boolean isSingleton() {  
        return true;  
    }  
  
  
  
   	private Set<HostAndPort> parseHostAndPort() throws Exception {
		try {
			Set<HostAndPort> haps = new HashSet<HostAndPort>();
			String[] clusterListArray = clusterList.split(",");
			for (String hostport : clusterListArray) {
				String[] ipAndPort = hostport.split(":");
				HostAndPort hap = new HostAndPort(ipAndPort[0], Integer.parseInt(ipAndPort[1]));
				haps.add(hap);
			}
			return haps;
		} catch (IllegalArgumentException ex) {
			ex.printStackTrace();
			throw ex;
		} catch (Exception ex) {
			ex.printStackTrace();
			throw new Exception("解析 jedis 配置檔案失敗", ex);
	

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

    public void setTimeout(int timeout) {  
        this.timeout = timeout;  
    }  
  
    public void setMaxRedirections(int maxRedirections) {  
        this.maxRedirections = maxRedirections;  
    }  
  
 	public void setClusterList(String clusterList) {
		this.clusterList = clusterList;
	}
  
    public void setGenericObjectPoolConfig(GenericObjectPoolConfig genericObjectPoolConfig) {  
        this.genericObjectPoolConfig = genericObjectPoolConfig;  
    }  
  
}  

到此配置完成
使用時,直接注入即可, 如下所示:
 
@Autowired
JedisCluster jedisCluster;