`

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

}

 

分享到:
评论

相关推荐

    一致性hashjava实现

    在这个Java实现中,我们看到的是Ketama一致性哈希算法,这是一种在实践中广泛应用的一致性哈希变体。 Ketama一致性哈希算法由Last.fm的工程师开发,其设计目标是优化分布式哈希表的性能,特别是在处理大量小键值对...

    一致性Hash简单实现

    在这个简单的实现中,我们将探讨如何用Java语言来模拟一致性哈希的工作原理。 1. **一致性哈希的基本概念** - **哈希环**:一致性哈希将所有可能的哈希值映射到一个闭合的圆环上,每个节点都按照哈希值分布在环上...

    Ketama一致性Hash算法(含Java代码) 1

    Ketama一致性哈希算法是基于一致性哈希的一种优化实现,主要解决了传统一致性哈希中节点分布不均匀的问题。在Ketama中,每个实际的物理服务器会被映射到多个虚拟节点,通常是100到200个,这些虚拟节点均匀分布在环上...

    对一致性Hash算法,Java代码实现的深入研究1

    对于Java实现一致性Hash算法,有几种可能的方法: 1. **排序+List**:首先,将所有服务器节点的哈希值放入一个数组,然后使用排序算法(如归并排序、快速排序等)对数组进行排序,再将排序后的结果放入List中。之后...

    解决分布式数据插入数据库~一致性hash算法

    在文件名为“distribute-mysql”的压缩包中,可能包含了关于如何在Java环境中利用一致性哈希实现在MySQL分布式环境中的数据插入、查询以及优化等方面的代码示例和指南。通过对这些资源的深入学习和实践,可以更好地...

    ConsistentHash:一致性hash算法的 java 和 C++ 实现

    在Java中实现一致性哈希,可以使用JDK自带的`java.util.HashMap`或者第三方库如Google的Guava库中的`com.google.common.hash.Hashing`类来计算哈希值。然后,为了实现环形结构,可以自定义一个`Node`类表示节点,并...

    PersistentIdealHashTree-Java实现

    2. 多线程并发测试:模拟并发插入和查询,检查数据一致性并评估性能。 3. 性能基准测试:度量插入、查询和更新操作的时间复杂度,以及在不同数据规模下的表现。 4. 持久化测试:确保在程序重启后,数据能够正确恢复...

    解决java 与C# MD5 不一致问题 代码

    在软件开发过程中,经常需要对数据进行加密处理以确保数据的安全性和一致性。MD5是一种常用的哈希算法,被广泛应用于各种场景中,如密码加密、文件校验等。但在跨平台或多语言环境中使用MD5时,可能会遇到不同编程...

    SpringBoot_shardDB_shardTable:SpringBoot集成Sharding-JDBC实现分库分表,自定义分片算法,基于一致性hash算法,易于扩容

    一致性Hash算法,易于扩容;添加了 单元测试,使用Spring提供的RestTemplate调用RestFul风格的API接口;整合了 quartz 定时任务框架 ,并进行了封装,只需在构建完定时任务Job类后,在 application-quartz....

    一致性哈希与Chord1

    【一致性哈希与Chord1】是一篇关于分布式哈希算法的文章,主要讨论了一致性哈希和普通哈希的区别,以及如何通过引入...在Java等编程语言中,一致性哈希可以用于实现高效、灵活的分布式服务,如缓存系统、负载均衡器等。

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

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

    哈希计算工具 java-hash

    哈希计算工具 `java-hash` 是一款基于Java编程语言实现的专门用于进行哈希值计算的软件。在软件开发和信息安全领域,哈希算法扮演着至关重要的角色,它能够将任意长度的数据转换为固定长度的输出,这个输出被称为...

    PHP实现的一致性Hash算法详解【分布式算法】

    本文实例讲述了PHP实现的一致性Hash算法。分享给大家供大家参考,具体如下: 一致性哈希算法是分布式系统中常用的算法,为什么要用这个算法? 比如:一个分布式存储系统,要将数据存储到具体的节点(服务器)上, 在...

    java实现的图片防篡改功能

    在IT行业中,图片防篡改是一项重要的安全技术,主要用于保护图像数据不被恶意修改。...通过`ImageHelper.java`和`ImageUtil.java`这两个源代码文件,我们可以深入了解并实现这一过程,从而提高图像数据的安全性。

    JAVA与C#一致的32位MD5加密方法

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能够将任意长度的信息映射为固定长度的输出,通常是一个128位的二进制数,以32位十六进制数的...因此,理解并正确实现这种一致性是非常关键的IT知识。

    Java开发中的Memcache原理及实现

    Java开发中的Memcached原理及实现主要涉及分布式缓存系统、内存管理和网络通信等多个技术领域。...不过,实际应用中还需考虑系统的整体架构、数据一致性、容错能力等因素,以实现最佳的缓存解决方案。

    MD5算法的Java实现类

    这个过程是不可逆的,即无法通过MD5值恢复原始数据,因此MD5常用于验证数据的完整性和一致性。 在Java中,我们可以按照以下步骤实现MD5哈希: 1. **导入必要的包**:首先需要导入`java.security.MessageDigest`和`...

    jenkins-hash-java:Jenkins的哈希值产生32位和64位值

    詹金斯·哈希非加密目的Bob Jenkins哈希的Java实现。 此实现可产生32位和64位哈希值,并可用于哈希表查找。 此处实现的算法是32位体系结构的理想选择。什么是詹金斯哈希? Jenkins哈希是由Bob Jenkins创建的通用哈希...

    Hash一致性

    在Java环境下实现一致性哈希,我们可以创建两个关键类:`Shared`和`Node`。 首先,一致性哈希的核心思想是通过哈希函数将数据映射到一个固定大小的环形空间上,这个空间通常是一个整数环。每个节点(例如服务器)也...

Global site tag (gtag.js) - Google Analytics