`
xly_971223
  • 浏览: 1263276 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一致性哈希 java List实现

阅读更多
package cn.ceopen.shard.utils;

import java.util.ArrayList;
import java.util.List;

/**
 * 一致性hash 用list简单实现
 * @author 徐良永
 *
 * 2015年1月22日 上午11:13:35
 */
public class ConsistentHash {
	
	/**
	 * 圆环的长度
	 */
	private static final int CIRCLE_LENGTH = 100;
	
	//圆环
	private List<Node> circle = new ArrayList<Node>(CIRCLE_LENGTH);
	
	private List<Node> realNodes = new ArrayList<Node>();
	
	/**
	 * 添加真实结点
	 * @param node
	 */
	public void addNode(Node node){
		realNodes.add(node);
		refreshCircle();
	}
	
	/**
	 * 删除真实结点
	 * @param node
	 */
	public void removeNode(Node node){
		realNodes.remove(node);
		refreshCircle();
	}
	
	/**
	 * 刷新圆环
	 */
	private void refreshCircle(){
		int n = CIRCLE_LENGTH / realNodes.size(); //把circle分成  n 份, n是真实结点个数
		int index = 0;
		//给圆环的每个节点赋值
		for (int i = 0; i < realNodes.size(); i++) {
			for (int j = 0; j < n; j++) {
				circle.add(index++, realNodes.get(i));
			}
		}
		
		//余下的节点 用第一个真实结点赋值
		for (int i = index; i < CIRCLE_LENGTH; i++) {
			circle.add(i, realNodes.get(0));
		}
	}
	
	
	public ConsistentHash(){
	}
	

	
	public Node getNode(int key){
		return circle.get(key % CIRCLE_LENGTH);
	}
	
	
	public static void main(String[] args) {
		ConsistentHash h = new ConsistentHash();
		h.addNode(new Node(1));
		h.addNode(new Node(2));
		h.addNode(new Node(3));
		
		for (int i = 0; i < 150; i++) {
			System.out.println(i + "--->" + h.getNode(i).toString());
		}
	}
	
	static class Node{
		private int nodeNum;
		
		public Node(int num){
			this.nodeNum = num;
		}
		
		@Override
		public String toString(){
			return "真实结点:" + nodeNum ;
		}
	}
}
分享到:
评论

相关推荐

    一致性哈希算法演示.rar

    运行平台:VS 2019 一致性哈希算法演示项目,演示新增节点key分布情况;移除节点key分布情况! C#,C#,C#.......

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

    1、解决案:排序+List 2、解决案:遍历+List 1、最好情况是只有个服务器节点的Hash值于带路由结点的Hash值,其 2、最坏情况是所有服务器节点的H

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【算法】什么是一致性哈希?用来解决什么问题? 144 【性能优化】页面静态化 144 【设计模式】写一个单例(延迟加载,高性能) 144 【容器】Apache Http Server和Tomcat 区别 145 【版本控制】GIT与SVN的区别 146 【高...

    Redis面试题50道(含答案)_.pdf

    39、支持一致性哈希的客户端有哪些? 40、Redis 与其他 key-value 存储有什么不同? 41、Redis 的内存占用情况怎么样? 42、都有哪些办法可以降低 Redis 的内存使用情况呢? 43、查看 Redis 使用情况及状态信息用...

    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.分配...

    Redis:Redis代码

    Redis真的那么好用吗? 一、Redis是什么? Redis是一个开源的底层使用C语言编写的key-value存储数据库。可用于缓存、事件发布订阅、高速队列等场景。...如果对数据有较高一致性要求时,还是建议使用

    PHP基础教程 是一个比较有价值的PHP新手教程!

    你可以用list()或者array()来定义它们,也可以直接为数组赋值。数组的索引从0开始。虽然我在这里没有说明,但是你一样可以轻易的使用多维数组。 // 一个包含两个元素的数组 $a&#91;0&#93; = "first"; $a&#91;1&#93;...

    ORACLE9i_优化设计与系统调整

    §10.3.2 相互产生运算的数字型字段长度和精度要一致 114 §10.3.2 不要为了节省空间而将字段的长度缩小或拆开 115 §10.4 将LOB类型的字段与其它的类型分开 115 §10.5 采用具有编码的设计方法 115 §10.6 建立公共...

    mysql官方中文参考手册

    1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. MaxDB的历史 1.5.3. MaxDB的特性 1.5.4. 许可和支持 1.5.5. MaxDB和MySQL之间的...

    MYSQL中文手册

    1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. MaxDB的历史 1.5.3. MaxDB的特性 1.5.4. 许可和支持 1.5.5. MaxDB和...

    MySQL 5.1参考手册中文版

    1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. MaxDB的历史 1.5.3. MaxDB的特性 1.5.4. 许可和支持 1.5.5. MaxDB和MySQL...

    MySQL 5.1参考手册

    1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. MaxDB的历史 1.5.3. MaxDB的特性 1.5.4. 许可和支持 1.5.5. MaxDB和MySQL之间的...

    MySQL5.1参考手册官方简体中文版

    2.1.4. 通过MD5校验和或GnuPG验证软件包的完整性 2.1.5. 安装布局 2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装器安装MySQL ...

    MySQL 5.1中文手冊

    1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. MaxDB的历史 1.5.3. MaxDB的特性 1.5.4. 许可和支持 1.5.5. MaxDB和MySQL之间的...

    MySQL 5.1参考手册 (中文版)

    1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. MaxDB的历史 1.5.3. MaxDB的特性 1.5.4. 许可和支持 1.5.5. MaxDB和MySQL之间的...

    MySQL 5.1官方简体中文参考手册

    1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. MaxDB的历史 1.5.3. MaxDB的特性 1.5.4. 许可和支持 1.5.5. MaxDB和MySQL之间的...

    mysql5.1中文手册

    MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. MaxDB的历史 1.5.3. MaxDB的特性 1.5.4. 许可和支持 1.5.5. ...

Global site tag (gtag.js) - Google Analytics