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;  
  • 相关阅读:
    按照指定的字符串拆分字符串,split()方法。
    charAt()取出指定位置的字符 .length()得到一个字符串的长度 indexOf()查找一个指定的字符是否存在并返回其位置 trim()去掉字符串的左右空格 substring()字符串的截取 str.replace(" ", ""); 去掉所有空格,包括首尾、中间
    字符串与字符数组的多种转换方式。
    匿名对象。
    构造方法。
    递归的练习,1.统计文件夹大小 2.删除文件夹及文件夹下的文件
    jquery零散小饼干
    jQuery review
    git解决冲突
    url、href、src
  • 原文地址:https://www.cnblogs.com/yifanSJ/p/9105958.html
Copyright © 2011-2022 走看看