首页 > 代码库 > Java集成redis集群

Java集成redis集群

技术分享

spring-redis.xml:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xsi:schemaLocation="        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd">    <!-- jedis cluster config -->    <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="qgs.npms.redis.JedisClusterFactory">        <property name="addressConfig">            <value>classpath:/redis/redis-config.properties</value>        </property>        <property name="addressKeyPrefix" value="address" />        <property name="timeout" value="300000" />        <property name="maxRedirections" value="6" />        <property name="genericObjectPoolConfig" ref="genericObjectPoolConfig" />    </bean></beans>
自己创建一个类JedisClusterFactory:
import java.util.HashSet;import java.util.Iterator;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*$");    public JedisClusterFactory() {    }    public JedisCluster getObject() throws Exception {        return this.jedisCluster;    }    public Class<? extends JedisCluster> getObjectType() {        return this.jedisCluster != null?this.jedisCluster.getClass():JedisCluster.class;    }    public boolean isSingleton() {        return true;    }    private Set<HostAndPort> parseHostAndPort() throws Exception {        try {            Properties ex = new Properties();            ex.load(this.addressConfig.getInputStream());            HashSet haps = new HashSet();            Iterator i$ = ex.keySet().iterator();            while(i$.hasNext()) {                Object key = i$.next();                if(((String)key).startsWith(this.addressKeyPrefix)) {                    String val = (String)ex.get(key);                    boolean isIpPort = this.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 var9) {            throw var9;        } catch (Exception var10) {            throw new Exception("解析 jedis 配置文件失败", var10);        }    }    public void afterPropertiesSet() throws Exception {        Set haps = this.parseHostAndPort();        this.jedisCluster = new JedisCluster(haps, this.timeout.intValue(), this.maxRedirections.intValue(), this.genericObjectPoolConfig);    }    public void setAddressConfig(Resource addressConfig) {        this.addressConfig = addressConfig;    }    public void setTimeout(int timeout) {        this.timeout = Integer.valueOf(timeout);    }    public void setMaxRedirections(int maxRedirections) {        this.maxRedirections = Integer.valueOf(maxRedirections);    }    public void setAddressKeyPrefix(String addressKeyPrefix) {        this.addressKeyPrefix = addressKeyPrefix;    }    public void setGenericObjectPoolConfig(GenericObjectPoolConfig genericObjectPoolConfig) {        this.genericObjectPoolConfig = genericObjectPoolConfig;    }}

redis-config.properties:

address1=192.168.1.36:6379address2=192.168.1.37:6379address3=192.168.1.38:6379address4=192.168.1.40:6379address5=192.168.1.41:6379address6=192.168.1.42:6379

Java调用:

@Autowired
private JedisCluster jedisCluster;  //jedisCluster就是对应的bean id 可以自动注入
System.out.println(jedisCluster.get("foo"));
System.out.println(jedisCluster.set("qq","222"));
System.out.println(jedisCluster.get("qq"));

Java集成redis集群