首页  

一致性hash与treemap     所属分类 architecture 浏览量 1383
jedis 客户端 一致性hash 关键代码

节点hash环构建
for (int i = 0; i != shards.size(); ++i) {
      for(int n = 0; n < 160 * shardInfo.getWeight(); n++) {
        nodes.put(this.algo.hash(shardInfo.getName() + "*" + n), shardInfo);
      }
}

虚拟节点数 160
hash算法  Hashing.MURMUR_HASH


设置分片 name  
可以设置成 host + port

List< JedisShardInfo> shardInfoList =new ArrayList< JedisShardInfo>();
JedisShardInfo infoA = new JedisShardInfo("127.0.0.1", 6379,"127.0.0.1:6379");
JedisShardInfo infoB = new JedisShardInfo("127.0.0.1", 6380,"127.0.0.1:6380");
shardInfoList.add(infoA);
shardInfoList.add(infoB);

根据key 查找节点

public S getShardInfo(byte[] key) {
    SortedMap< Long, S> tail = nodes.tailMap(algo.hash(key));
    if (tail.isEmpty()) {
      return nodes.get(nodes.firstKey());
    }
    return tail.get(tail.firstKey());
  }
  

TreeMap 的 tailMap() firstKey() 方法使用
public SortedMap< K,V> tailMap(K fromKey)
返回 key 大于或等于 fromKey的部分视图

一致性hash简单实现及测试
https://gitee.com/dyyx/redisdemo/blob/master/src/main/java/dyyx/SimpleConsistHashDemo.java

treemap  实例 
https://gitee.com/dyyx/redisdemo/blob/master/src/main/java/dyyx/TreeMapTest.java

上一篇     下一篇
B树与红黑树,为什么数据库使用B树索引

联合索引与最左匹配原则

Jedis客户端分片机制

MapReduce和Tez比较

redis 主从 哨兵 集群机制

CDH组件版本查看