分布式缓存技术redis学习系列(八)——JedisCluster源码解读:集群初始化、slot(槽)的分配、值的存取

redis集群环境,客户端使用JedisCluster获取连接并操作redis服务,上一篇 分布式缓存技术redis学习系列(七)——spring整合jediscluster 简单介绍了spring使用JedisCluster,这篇从JedisCluster源码层面看看是如何使用。

一、集群初始化

1、从单元测试开始,代码如下:

    @Autowired  
    private JedisCluster jedisCluster;  

    @Test
    public void testJedisCluster(){
        jedisCluster.set("name", "啊芝");
        String val = jedisCluster.get("name");
        System.out.println(val);
    }

2、在单元测试中我们注入了JedisCluster jedisCluster,它来源于spring配置文件对其的注册:

    <bean id="jedisCluster" class="com.jsun.service.redis.impl.JedisClusterFactory">  
        <property name="addressConfig">  
            <value>classpath:redis.properties</value>  
        </property>  
        <property name="addressKeyPrefix" value="cluster" />   <!--  属性文件里  key的前缀 -->  

        <property name="timeout" value="300000" />  
        <property name="maxRedirections" value="6" />  
        <property name="genericObjectPoolConfig" ref="genericObjectPoolConfig" />  
    </bean>

3、JedisClusterFactory:

它实现了InitializingBean接口,重写了afterPropertiesSet()方法,当JedisClusterFactory Bean被注册之后,此方法被调用,它里面调用parseHostAndPort()方法,具体代码如下:

    @Override  
    public void afterPropertiesSet() throws Exception { 
    //拿到所有节点配置
        Set<HostAndPort> haps = this.parseHostAndPort();  

    //初始化集群
        jedisCluster = new JedisCluster(haps, timeout, maxRedirections,genericObjectPoolConfig);  

    }  
    private Set<HostAndPort> parseHostAndPort() throws Exception {  
        try {  
        //读取配置文件,即redis.properties,把配置的节点全部存放入Set<HostAndPort> haps里面返回
            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(
  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值