首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

一致性hash之java兑现

2012-09-01 
一致性hash之java实现一致性hash的原理 把server和key hash到同一个空间,然后同方向找最近的即可。import j

一致性hash之java实现

一致性hash的原理 把server和key hash到同一个空间,然后同方向找最近的即可。

import java.util.Collection;  import java.util.SortedMap;  import java.util.TreeMap;    public class ConsistentHash<T> {        private final HashFunction hashFunction;      private final int numberOfReplicas;      private final SortedMap<Integer, T> circle = new TreeMap<Integer, T>();            public ConsistentHash(HashFunction hashFunction, int numberOfReplicas,              Collection<T> nodes) {          this.hashFunction = hashFunction;          this.numberOfReplicas = numberOfReplicas;            for (T node : nodes) {              add(node);          }      }      /**      * 把一个实际节点映射到多个位置上,多个位置的都指向到一个相同的节点。      * @param node      */      public void add(T node) {          for (int i = 0; i < numberOfReplicas; i++) {              circle.put(hashFunction.hash(node.toString() + i), node);          }      }        public void remove(T node) {          for (int i = 0; i < numberOfReplicas; i++) {              circle.remove(hashFunction.hash(node.toString() + i));          }      }      /**      * 根据一个对象的key获得它的将要存储的节点      * @param key      * @return      */      public T get(Object key) {          if (circle.isEmpty()) {              return null;          }          int hash = hashFunction.hash(key);          if (!circle.containsKey(hash)) {              SortedMap<Integer, T> tailMap = circle.tailMap(hash);              hash = tailMap.isEmpty() ? circle.firstKey() : tailMap.firstKey();          }          return circle.get(hash);      }    }  
?

热点排行