`

一致性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);
   }
 }

 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));
   }
 }

 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);
 }

}
分享到:
评论

相关推荐

    一致性哈希算法源码 Ketama一致性hash算法源码

    Ketama算法是一致性hash算法的一个优秀实现。增删节点后数据命中率及均分率都很高。

    基于go语言实现的分布式缓存系统源码+项目说明(以键值对的形式存储数据,一致性hash算法选择存储节点).zip

    基于go语言实现的分布式缓存系统源码+项目说明(以键值对的形式存储数据,一致性hash算法选择存储节点,Protobuf通信协议编解码。用户输入查询请求后,会优先在缓存系统查询,查不到则使用回调函数去源数据库查询,...

    xmemcached源码

    java的memcached客户端,支持一致性hash,支持动态增删服务器,客户端源码

    hashtree的小文件同步方案

    NULL 博文链接:https://willvvv.iteye.com/blog/712250

    各大企业大数据面试题目总结

    手写快排 如何利用zookeeper进行选举,画图说明 ...13.一致性hash为什么加入节点后可以保证相对的balance的状态 14.哪些适用到了一致性hash 15.手写树相关的算法(层次遍历的变种) 16.JVM内存布局

    redis分布式中间源码+使用demo.rar

    (6)采用一致性hash算法进行分片,扩缩容时只会影响小部分数据 扩缩容shard后支持只影响原shard的部分数据,影响小 使用例子:https://blog.csdn.net/khuangliang/article/details/120142649

    基于go语言实现的分布式缓存系统完整源码+说明(以键值对的形式存储数据).zip

    基于go语言实现的分布式缓存系统源码+项目说明(以键值对的形式存储数据,一致性hash算法选择存储节点,Protobuf通信协议编解码。用户输入查询请求后,会优先在缓存系统查询,查不到则使用回调函数去源数据库查询,...

    Java编写多个爬虫实例

    ConsistentHash 一致性Hash WordCount Map-Reduce算法例子 Retrive 文件下载 IP 获得IP地址示例 ip QQ纯真数据库示例 HtmlParser 网页内容提取库HtmlParser的源码项目 nekohtml-1.9.7 nekohtml的源码项目 RhinoTest ...

    MD5源码(C++)

    MD5的全称是Message-digest Algorithm 5(信息-摘要算法),用于确保信息传输完整一致。在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc,的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展...

    价值过亿的架构师训练营课面试题和答案.pptx

    价值过亿的架构师训练营课面试题和答案.pptx 架构师职责 听课总结 – 第一课 架构视图,设计文档 – 第二课 ...系统架构 分布式缓存 一致性哈希 Hash 第9课 听课总结 系统架构 消息队列 负载均衡 数据库备份 第

    C++实现MD5算法程序设计与实现.zip

    MD5算法是一种广泛使用的 Hash 算法,常用于确保信息传输的完整性与一致性。对于输入的任一不定长度信息, MD5算法在对最后一块进行填充后用512个比特对其进行分组,使用压缩函数将其生成4个32比特的数据,合并为128...

    百度地图毕业设计源码-interview-guide:面试指南

    百度地图毕业设计源码 面试内容的汇总 ...保证缓存与数据库中数据一致性 数据类型 hash扩容 MySQL 索引 消息队列 如何保证消息的可靠性 分布式 分布式锁 分布式事务 redis和zookeeper如何实现分布式锁

    java8集合源码分析-Notes:笔记

    一致性哈希算法? 1.1.2 Java语法糖 string的hash算法 hash冲突的解决办法:拉链法 foreach循环的原理 volatile关键字的底层实现原理 泛型类 泛型接口 泛型方法 反射 正则 捕获组和非捕获组 贪婪,勉强,独占模式 ...

    百度地图毕业设计源码-WheelPlan:重新发明轮子来训练我们的代码技能

    百度地图毕业设计源码 造轮子计划 背景与目的 游戏行业是一个需求非常复杂多样的行业,身处于这样的行业中,有它独有的乐趣。 而如何提升自我,提高自己在...一致性hash算法(虚拟节点与主动动态增删节点,异常删除节点

    java简易版开心农场源码--:个人代码积累

    java简易版开心农场源码 ...Redis看起来非常简单,但它影响着系统的效率、性能、数据一致性。用好它不容易,具体包括:缓存时长(复杂多维度的计算)、缓存失效处理(主动更新)、缓存键(Hash和方便人工干预)、

    基于springBoot自研微服务框架+源代码+文档说明

    一致性hash算法,支持可配置虚拟节点数 #### 支持可插拔的注册中心 orion-register-zk-starter cp orion-register-etcd-starter cp orion-register-nacos-starter ap ...

    数据库比对工具,实现自动化配置进行数据比对,避免频繁写sql 进行处理

    (2)目前已经支持如下功能: 量级对比、一致性对比、差异case 发现,已经支持MySQL、Hive、Doris (3)后续计划支持:陌生表指针探测,包括:枚举值探测、范围值探测、主键id hash 探测 软件架构 技术栈: 后端:...

    Java思维导图xmind文件+导出图片

    Redis缓存与数据库一致性问题解决方案 基于redis实现分布式实战 图解Redis中的AOF和RDB持久化策略的原理 redis读写分离架构实践 redis哨兵架构及数据丢失问题分析 redis Cluster数据分布算法之Hash slot ...

    帝国CMS-PHP

    &lt;/p&gt;&lt;p&gt;后台支持直接修改模板ID,方便使用多访问端功能模板ID不一致处理。&lt;/p&gt;&lt;p&gt;动态页面新增支持缓存,让采用动态页面模式的网站访问速度更快,效率更高。&lt;/p&gt;&lt;p&gt;新增对PHP7.*系列运行环境的支持,兼容性更好。...

    2019年 Redis从入门到高可用 分布式实战教程

    9-5 一致性哈希分区.mp4 9-4 节点取余分区.mp4 9-3 数据分布概论.mp4 9-2 呼唤集群.mp4 9-16 原生命令和redis-trib.rb对比.mp4 9-14 ruby环境准备-操作.mp4 9-13 ruby环境准备-说明.mp4 9-12 原生安装-4.分配...

Global site tag (gtag.js) - Google Analytics