zoukankan      html  css  js  c++  java
  • 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="xxx.JedisClusterFactory">  
        <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: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类:

    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*$");  
      
        @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 {  
                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);  
            }  
        }  
          
        @Override  
        public 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;

    参考:http://xyqck163.iteye.com/blog/2211108

  • 相关阅读:
    Android AHandle AMessage
    android java 与C 通过 JNI双向通信
    android 系统给应用的jar
    UE4 unreliable 同步问题
    UE4 difference between servertravel and openlevel(多人游戏的关卡切换)
    UE4 Run On owing Client解析(RPC测试)
    UE4 TSubclassOf VS Native Pointer
    UE4 内容示例网络同步Learn
    UE4 多人FPS VR游戏制作笔记
    UE4 分层材质 Layerd Materials
  • 原文地址:https://www.cnblogs.com/chen-lhx/p/6182597.html
Copyright © 2011-2022 走看看