`

一致性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算法源码

    一致性哈希算法是一种分布式哈希(Distributed Hash Table, DHT)技术,旨在解决在分布式环境中数据分布不均匀的问题。Ketama算法是基于一致性哈希的一种优化实现,由Last.fm公司的Simon Willison提出,其目标是在...

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

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

    Hash_VC++源码_

    2. 扩展:将输入消息分为多个块,每个块进行特定的扩展运算,确保所有块长度一致。 3. 转换:对每个块进行多次迭代计算,每次迭代都会使用当前的哈希值和块的数据。 4. 结束:将所有迭代后的结果进行异或操作,得到...

    hash抽奖平台源码带h5客户端

    2. 抽奖逻辑:源码中会包含具体的抽奖算法,如随机数生成、哈希计算等,确保每次抽奖的随机性和一致性。 3. 安全性:源码应包含防止SQL注入、XSS攻击等安全措施,保护用户数据的安全。 三、H5客户端详解 H5,即...

    hash对比图片_hash图片对比_源码.zip

    在IT行业中,哈希(Hash)对比是一种常用的技术,用于检查文件或数据的完整性,以及进行图像相似性检测。在给定的压缩包文件“hash对比图片_hash图片对比_源码.zip”中,我们可以期待找到关于如何实现这个功能的源...

    xmemcached源码

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

    Nginx安装url_hash插件.doc

    这种策略有助于优化缓存和session一致性,提高服务的响应速度和效率。 **url_hash插件的安装步骤** 1. **下载所需软件** 首先,需要下载以下软件包: - PCRE(Perl Compatible Regular Expressions)库,用于...

    hashtree的小文件同步方案

    在分布式系统中,服务器通常扮演中心协调者的角色,维护全局的文件哈希树,并与各个客户端保持通信,确保所有副本的一致性。 具体到哈希树的实现,可以使用Merkle Tree,这是一种特殊的二叉树,其中每个非叶子节点...

    哈希计算工具 java-hash.7z

    8. **分布式系统**: 在分布式系统中,如一致性哈希,哈希函数用于确定数据应存储在哪个节点上,以均衡负载并处理节点的增减。 9. **碰撞处理**: 虽然理想情况下哈希函数应确保每个输入都有唯一的哈希值,但实际上...

    文件hash值自动批量修改软件[源码]

    哈希值通常用于验证文件的完整性和一致性,因为哪怕文件内容微小的变动都会导致哈希值的巨大变化。在标题提到的“文件hash值自动批量修改软件[源码]”中,我们关注的是如何实现这个功能,以及为何要修改文件的哈希值...

    murmurhash

    这对于分布式系统尤其重要,因为它可以保证不同节点之间的一致性。 5. **源码开放**:MurmurHash的源代码是开源的,这使得开发者可以自由地查看、使用和改进算法。在压缩包中的`murmurhash.c`文件就是MurmurHash的...

    mysql源码(mysql-8.1.0.tar.gz)

    6. **复制与高可用性**:MySQL的主从复制功能在8.1.0版本中可能会有增强,源码中可以研究半同步复制、GTID(全局事务标识符)等技术,以提高数据一致性和系统可用性。 7. **安全特性**:MySQL 8.x版本引入了更多...

    一款Java分布式KV存储系统源码.zip

    1. **分布式哈希(Distributed Hash Table, DHT)**:这是一种分布式数据存储技术,通过一致性哈希算法将键映射到集群中的节点,确保数据的均匀分布和负载均衡。例如,Chubby、Cassandra等系统就采用了这种技术。 2...

    mysql源码

    InnoDB存储引擎支持ACID(原子性、一致性、隔离性、持久性)事务,采用MVCC(多版本并发控制)实现并发,通过回滚段和重做日志确保数据的可恢复性。 五、索引 MySQL支持多种类型的索引,包括B-Tree、Hash、Full-...

    java源码:哈希计算工具 java-hash.7z

    - 如何验证数据的完整性和一致性,例如通过比较文件的MD5或SHA值。 通过分析和实践这些源码,开发者不仅可以提升Java编程技能,还能深入理解哈希算法的原理,这对于软件开发尤其是涉及数据安全、缓存和搜索优化的...

    cpp-nginx一致性哈希模块支持虚节点可动态剔除不健康节点

    在IT行业中,尤其是在分布式系统和负载均衡领域,一致性哈希是一种重要的算法,它解决了数据分布和负载均衡的问题。本文将详细探讨"cpp-nginx一致性哈希模块支持虚节点可动态剔除不健康节点"这一主题。 一致性哈希...

    p2p 源码

    9. **错误检测与恢复**:了解如何通过Piece Hashes确保数据的完整性和一致性,以及错误检测和修复机制。 10. **内存管理和资源优化**:在P2P环境中,有效管理内存和资源非常重要,源码可能包含各种优化策略。 通过...

    Flex3获得文件Hash值MD5值完整工程源码

    Flex3是一种基于ActionScript 3.0的框架,用于创建富互联网应用程序(RIA)。在Flex3中,我们可能需要获取文件的哈希值,...它可以帮助开发者快速地在Flex3应用中实现文件的MD5校验功能,确保数据的完整性和一致性。

    分布式哈希表和一致性哈希

    分布式哈希表(Distributed Hash Table,简称DHT)是一种在分布式系统中用以实现大规模数据存储和快速定位的算法。DHT通过分布式的方式将数据以键值对的形式存储在各个节点上,从而实现无需中心服务器的高效数据管理...

    Delphi sha1加密源码

    Delphi SHA1加密源码是用于在Delphi编程环境中实现SHA1散列算法的代码,它确保了在不同编程语言(如C#、PHP)中进行加密时的一致性。SHA1(Secure Hash Algorithm 1)是一种广泛使用的密码学安全散列函数,由美国...

Global site tag (gtag.js) - Google Analytics