电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

java實(shí)現(xiàn)一致性hash算法實(shí)例代碼

瀏覽:4日期:2022-08-19 14:06:34

一致性hash算法java版本簡單實(shí)現(xiàn)

package com.java4all.grouth.consistent;import java.util.LinkedList;import java.util.List;import java.util.SortedMap;import java.util.TreeMap;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * 一致性hash算法java簡易實(shí)現(xiàn) * @author IT云清 * 參考:https://blog.csdn.net/zhanglu0223/article/details/100579254 */public class ConsistentHash { private static final Logger LOGGER = LoggerFactory.getLogger(ConsistentHash.class); /** * 虛擬節(jié)點(diǎn)個數(shù) * 每個真實(shí)節(jié)點(diǎn)對應(yīng)的虛擬節(jié)點(diǎn)個數(shù) */ private static final int VIRTUAL_NUM = 5; /** * 虛擬節(jié)點(diǎn) * eg:<656715414,192.168.1.1&&VN3> * 真實(shí)節(jié)點(diǎn)數(shù)量一般偏少,引入虛擬節(jié)點(diǎn)來平衡 * 每個真實(shí)節(jié)點(diǎn)對應(yīng)多個虛擬節(jié)點(diǎn),這樣每個節(jié)點(diǎn)盡可能在hash環(huán)上均勻分布,可以根據(jù)虛擬節(jié)點(diǎn)找到真實(shí)節(jié)點(diǎn) */ private static SortedMap<Integer,String> shards = new TreeMap<>(); /** * 真實(shí)節(jié)點(diǎn) */ private static List<String> realNodes = new LinkedList<>(); /** * 模擬初始節(jié)點(diǎn) */ private static String[] servers = {'116.116.1.1', '116.116.1.2', '116.116.1.3', '116.116.1.5', '116.116.1.6'}; /** * 初始化虛擬節(jié)點(diǎn) */ static { for (String server : servers) { realNodes.add(server); LOGGER.info('添加真實(shí)節(jié)點(diǎn){}',server); for(int i = 0;i < VIRTUAL_NUM; i ++){ String virtualNode = server + '&&VN' + i; int hash = getHash(virtualNode); shards.put(hash,virtualNode); LOGGER.info('添加虛擬節(jié)點(diǎn){},hash為{}',virtualNode,hash); } } } public static void main(String[]args){ test2(); } public static void test2(){ //測試定位node LOGGER.info(getSever('aa')); LOGGER.info(getSever('漲三')); LOGGER.info(getSever('num_19120000')); LOGGER.info(getSever('num_19120000')); LOGGER.info('------------------'); //測試添加節(jié)點(diǎn) addNode('192.192.116.1'); addNode('192.192.116.2'); LOGGER.info('------------------'); //測試刪除節(jié)點(diǎn) delNode('116.116.1.1'); } /** * 獲取真實(shí)節(jié)點(diǎn)ip * @param str 字符串 * @return */ public static String getSever(String str){ //計(jì)算hash int hash = getHash(str); Integer key = null; //尋找最近的虛擬node SortedMap<Integer, String> tailMap = shards.tailMap(hash); //獲取在hash環(huán)上 右側(cè)最近的虛擬節(jié)點(diǎn)的key key = tailMap.isEmpty() ? shards.lastKey() : tailMap.firstKey(); //根據(jù)hash獲取虛擬節(jié)點(diǎn) String virtualNode = shards.get(key); //返回虛擬節(jié)點(diǎn)的真實(shí)ip return virtualNode.substring(0,virtualNode.indexOf('&&')); } /** * 添加節(jié)點(diǎn) * @param node */ public static void addNode(String node){ if(!realNodes.contains(node)){ realNodes.add(node); LOGGER.info('新增真實(shí)節(jié)點(diǎn)上線,{}',node); for(int i = 0;i < VIRTUAL_NUM;i ++){ String virtualNode = node + '&&VN' + i; int hash = getHash(virtualNode); shards.put(hash,virtualNode); LOGGER.info('新增虛擬節(jié)點(diǎn){},hash為{}',virtualNode,hash); } } } /** * 刪除節(jié)點(diǎn) * @param node */ public static void delNode(String node){ if(realNodes.contains(node)){ //下線真實(shí)節(jié)點(diǎn) realNodes.remove(node); LOGGER.info('真實(shí)節(jié)點(diǎn)下線,{}',node); for(int i = 0;i < VIRTUAL_NUM; i++){ String virtualNode = node + '&&VN' + i; int hash = getHash(virtualNode); //移除虛擬節(jié)點(diǎn) shards.remove(hash); LOGGER.info('下線虛擬節(jié)點(diǎn){},hash為{}',virtualNode,hash); } } } /** * FNV1_32_HASH算法 * @param str 任意字符串 * @return 返回int類型的hash值 */ private static int getHash(String str) { final int p = 16777619; int hash = (int) 2166136261L; for (int i = 0; i < str.length(); i++) { hash = (hash ^ str.charAt(i)) * p; } hash += hash << 13; hash ^= hash >> 7; hash += hash << 3; hash ^= hash >> 17; hash += hash << 5; // 如果算出來的值為負(fù)數(shù)則取其絕對值 if (hash < 0) { hash = Math.abs(hash); } return hash; }}

到此這篇關(guān)于java實(shí)現(xiàn)一致性hash算法的文章就介紹到這了,更多相關(guān)java實(shí)現(xiàn)一致性hash算法內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 北京自然绿环境科技发展有限公司专业生产【洗车机_加油站洗车机-全自动洗车机】 | 耐破强度测试仪-纸箱破裂强度试验机-济南三泉中石单品站 | 四探针电阻率测试仪-振实密度仪-粉末流动性测定仪-宁波瑞柯微智能 | IWIS链条代理-ALPS耦合透镜-硅烷预处理剂-上海顶楚电子有限公司 lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | 美能达分光测色仪_爱色丽分光测色仪-苏州方特电子科技有限公司 | 设定时间记录电子秤-自动累计储存电子秤-昆山巨天仪器设备有限公司 | 聚丙烯酰胺PAM-聚合氯化铝PAC-絮凝剂-河南博旭环保科技有限公司 巨野电机维修-水泵维修-巨野县飞宇机电维修有限公司 | 红外光谱仪维修_二手红外光谱仪_红外压片机_红外附件-天津博精仪器 | 代办建筑资质升级-建筑资质延期就找上海国信启航 | 钢衬四氟管道_钢衬四氟直管_聚四氟乙烯衬里管件_聚四氟乙烯衬里管道-沧州汇霖管道科技有限公司 | 私人别墅家庭影院系统_家庭影院音响_家庭影院装修设计公司-邦牛影音 | 沧州友城管业有限公司-内外涂塑钢管-大口径螺旋钢管-涂塑螺旋管-保温钢管生产厂家 | 滑石粉,滑石粉厂家,超细滑石粉-莱州圣凯滑石有限公司 | 精密钢管,冷拔精密无缝钢管,精密钢管厂,精密钢管制造厂家,精密钢管生产厂家,山东精密钢管厂家 | 【中联邦】增稠剂_增稠粉_水性增稠剂_涂料增稠剂_工业增稠剂生产厂家 | 网络推广公司_网络营销方案策划_企业网络推广外包平台-上海澜推网络 | Boden齿轮油泵-ketai齿轮泵-yuken油研-无锡新立液压有限公司 | 河南砖机首页-全自动液压免烧砖机,小型砌块水泥砖机厂家[十年老厂] | 「安徽双凯」自动售货机-无人售货机-成人用品-自动饮料食品零食售货机 | 新密高铝耐火砖,轻质保温砖价格,浇注料厂家直销-郑州荣盛窑炉耐火材料有限公司 | 除甲醛公司-甲醛检测-广西雅居环境科技有限公司 | 清水混凝土修复_混凝土色差修复剂_混凝土色差调整剂_清水混凝土色差修复_河南天工 | 捷码低代码平台 - 3D数字孪生_大数据可视化开发平台「免费体验」 | 楼承板设备-楼承板成型机-免浇筑楼承板机器厂家-捡来 | 丹佛斯变频器-Danfoss战略代理经销商-上海津信变频器有限公司 | 次氯酸钠厂家,涉水级次氯酸钠,三氯化铁生产厂家-淄博吉灿化工 | 设定时间记录电子秤-自动累计储存电子秤-昆山巨天仪器设备有限公司 | CE认证_FCC认证_CCC认证_MFI认证_UN38.3认证-微测检测 CNAS实验室 | 实体店商新零售|微赢|波后|波后合作|微赢集团| 沟盖板_复合沟盖板厂_电力盖板_树脂雨水篦子-淄博拜斯特 | 安全,主动,被动,柔性,山体滑坡,sns,钢丝绳,边坡,防护网,护栏网,围栏,栏杆,栅栏,厂家 - 护栏网防护网生产厂家 | 游动电流仪-流通式浊度分析仪-杰普仪器(上海)有限公司 | 数码听觉统合训练系统-儿童感觉-早期言语评估与训练系统-北京鑫泰盛世科技发展有限公司 | 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 长城人品牌官网| 济南菜鸟驿站广告|青岛快递车车体|社区媒体-抖音|墙体广告-山东揽胜广告传媒有限公司 | 聚天冬氨酸,亚氨基二琥珀酸四钠,PASP,IDS - 远联化工 | 广州工业氧气-工业氩气-工业氮气-二氧化碳-广州市番禺区得力气体经营部 | 能耗监测系统-节能监测系统-能源管理系统-三水智能化 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 欧美日韩国产一区二区三区不_久久久久国产精品无码不卡_亚洲欧洲美洲无码精品AV_精品一区美女视频_日韩黄色性爱一级视频_日本五十路人妻斩_国产99视频免费精品是看4_亚洲中文字幕无码一二三四区_国产小萍萍挤奶喷奶水_亚洲另类精品无码在线一区 |