zoukankan      html  css  js  c++  java
  • Redis(四):Spring + JedisCluster操作Redis(集群)

    1.maven依赖:

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

    2.增加spring 配置

    <!-- ==========================JedisCluster配置=========================== -->  
    <bean name="genericObjectPoolConfig" class="org.apache.commons.pool2.impl.GenericObjectPoolConfig">  
        <property name="maxWaitMillis" value="-1"></property>  
        <property name="maxTotal" value="1000"></property>  
        <property name="minIdle" value="8"></property>  
        <property name="maxIdle" value="100"></property>  
    </bean>  
    <bean id="jedisCluster" class="com.atguigu.crud.util.JedisClusterFactory">  
        <property name="addressConfig">  
               <value>classpath:redis-nodes.properties</value>  
           </property>  
           <!-- 属性文件里 key的前缀 -->  
           <property name="addressKeyPrefix" value="address" />  
              
           <property name="timeout" value="300000" />  
           <property name="maxRedirections" value="6" />  
           <property name="genericObjectPoolConfig" ref="genericObjectPoolConfig" />  
    </bean>  

    3.增加connect-redis.properties 配置文件

    这里配置了6个节点

    address1=192.168.221.128:7000  
    address2=192.168.221.128:7001  
    address3=192.168.221.128:7002  
    address4=192.168.221.129:7003  
    address5=192.168.221.129:7004  
    address6=192.168.221.129:7005  

    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;  
  • 相关阅读:
    Server08 R2 Live Migration 测试 Part 6:使用SCVMM 2008 R2进行Live Migration
    Workstation 可成功安装ESX但发现不到本地存储的解决方法
    代码生成器ltscode2.1
    2010面试攻略
    我看代码生成
    程序员如何提高工作效率
    PE格式全分析
    Quartz.NET 2.0 学习笔记(4) :cron表达式
    asp.net 2.0 访问 MySQL 数据库
    My blog.
  • 原文地址:https://www.cnblogs.com/yifanSJ/p/9105958.html
Copyright © 2011-2022 走看看