第五周作业一
用你熟悉的编程语言实现一致性 hash 算法
代码如下(hashfunction这里是自定义的,可以用比如md5之类的算法)
(发布需要至少50个汉字所以这段话就是凑字数。。。可以无视)
版权声明: 本文为 InfoQ 作者【lithium】的原创文章。
原文链接:【http://xie.infoq.cn/article/e5920ce83acd4bd45e269122b】。未经作者许可,禁止转载。
用你熟悉的编程语言实现一致性 hash 算法
代码如下(hashfunction这里是自定义的,可以用比如md5之类的算法)
(发布需要至少50个汉字所以这段话就是凑字数。。。可以无视)
class ConsistentHashing { private HashFunction hashFunction; private int replicas; private TreeMap<Integer> circle = new TreeMap<Integer>(); public ConsistentHash(HashFunction hashFunction, int replicas, Collection<T> nodes) { this.hashFunction = hashFunction; this.replicas = replicas; for (T node : nodes) { add(node); } } public void add(T node) { for (int i = 0; i < replicas; i++) { circle.put(hashFunction.hash(node.toString() + i), node); } } public void remove(T node) { for (int i = 0; i < replicas; i++) { circle.remove(hashFunction.hash(node.toString() + i)); } } public T get(Object key) { if (circle.isEmpty()) { return null; } int hash = hashFunction.hash(key); if (!circle.containsKey(hash)) { TreeMap<Integer> tailMap = circle.tailMap(hash); hash = tailMap.isEmpty() ? circle.firstKey() : tailMap.firstKey(); } return circle.get(hash); }}
版权声明: 本文为 InfoQ 作者【lithium】的原创文章。
原文链接:【http://xie.infoq.cn/article/e5920ce83acd4bd45e269122b】。未经作者许可,禁止转载。
还未添加个人签名 2018.07.07 加入
还未添加个人简介
促进软件开发及相关领域知识与创新的传播
评论 (1 条评论)