zoukankan      html  css  js  c++  java
  • spring集成 JedisCluster 连接 redis3.0 集群

    原文:http://xyqck163.iteye.com/blog/2211108

    最近在公司做了 jedisCluster整合spring 的配置, 分享如下

    客户端采用最新的jedis 2.7

    1.

    maven依赖:

    <dependency>

    <groupId>redis.clients</groupId>

    <artifactId>jedis</artifactId>

    <version>2.7.2</version>

    </dependency>

    2.

    增加spring 配置(最好配置在application-context.xml,如果会用在shiro中的sessionDao时,必须要在加载shiro配置文件前加载此配置信息)

    <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=192.168.1.249:7000
    address2=192.168.1.249:7001
    address3=192.168.1.249:7002
    address4=192.168.1.248:7003
    address5=192.168.1.248:7004
    address6=192.168.1.248: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;

    6.用法示例:

    jedisCluster.set("aaa", "aaaaaa_value");
    jedisCluster.expire("aaa", 100);

    System.out.println(jedisCluster.get("aaa"));

  • 相关阅读:
    网站安全编程 黑客入侵 脚本黑客 高级语法入侵 C/C++ C# PHP JSP 编程
    【算法导论】贪心算法,递归算法,动态规划算法总结
    cocoa2dx tiled map添加tile翻转功能
    8月30日上海ORACLE大会演讲PPT下载
    【算法导论】双调欧几里得旅行商问题
    Codeforces Round #501 (Div. 3) B. Obtaining the String (思维,字符串)
    Codeforces Round #498 (Div. 3) D. Two Strings Swaps (思维)
    Educational Codeforces Round 89 (Rated for Div. 2) B. Shuffle (数学,区间)
    洛谷 P1379 八数码难题 (BFS)
    Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords (贪心)
  • 原文地址:https://www.cnblogs.com/shihaiming/p/5953956.html
Copyright © 2011-2022 走看看