# -*- coding: utf-8 -*-

"""

一致性哈希算法 python实现

参考

http://weblogs.java.net/blog/2007/11/27/consistent-hashing

http://code.google.com/p/flexihash/

http://www.codinglabs.org/html/consistent-hashing.html

"""

import hashlib

class ConsistentHash(object):

def __init__(self, hasher=None, replicas=None):

self.hasher = hasher and hasher or hashlib.md5

self.replicas = replicas and replicas or 64

self.positionToTarget = {}

self.targetToPositions = {}

self.targetCount = 0

def addTarget(self, target):

self.targetToPositions[target] = []

for i in range(self.replicas):

position = self.hasher(str(target)+str(i)).hexdigest()

self.positionToTarget[position] = target

self.targetToPositions[target].append(position)

self.targetCount += 1

def addTargets(self, targets):

for target in targets:

self.addTarget(target)

def removeTarget(self, target):

if self.targetToPositions.has_key(target):

for position in self.targetToPositions[target]:

self.positionToTarget.pop(position)

self.targetToPositions.pop(target)

self.targetCount -= 1

def getAllTargets(self):

return self.targetToPositions.keys()

def lookupList(self, resource, requestedCount):

if not self.positionToTarget:

return []

resourcePosition = self.hasher(resource).hexdigest()

results = []

collect = False

for key in sorted(self.positionToTarget.keys()):

value = self.positionToTarget[key]

if not collect and key > resourcePosition:

collect = True

if collect and value not in results:

results.append(value)

if len(results) == requestedCount or \

len(results) == self.targetCount:

return results

for key in sorted(self.positionToTarget.keys()):

value = self.positionToTarget[key]

if value not in results:

results.append(value)

if len(results) == requestedCount or \

len(results) == self.targetCount:

return results

return results

def lookup(self, resource):

targets = self.lookupList(resource, 1)

return targets[0]

哈希运算python实现_一致性哈希算法 python实现相关推荐

  1. 社区发现算法python视频_社区发现FN算法Python实现

    社区发现FN算法Python实现 算法原理 评价指标 结果对比 源码 ​2004年,Newman在GN(Girvan and Newman, 2002)算法的基础上,提出了另外一种快速检测社区的算法, ...

  2. 先来先服务算法代码_一致性哈希算法编写

    今天我想先给大家科普下一致性哈希算法这块,因为我下一篇文章关于缓存的高可用需要用到这个,但是又不能直接在里面写太多的代码以及关于一致性hash原理的解读,这样会失去对于缓存高可用的理解而且会造成文章很 ...

  3. 一致性hash算法虚拟节点_一致性哈希算法——虚拟节点

    一致性哈希算法--虚拟节点 一致性哈希算法是分布式系统中常用的算法.比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是 ...

  4. java murmurhash实现_一致性哈希算法与Java实现

    一致性哈希算法是分布式系统中常用的算法.比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是数据的key,N是机器节点数 ...

  5. 一致性hash算法虚拟节点_一致性哈希虚拟节点

    采用固定哈希算法平衡负载 在大规模的缓存应用中,应运而生了分布式缓存系统.key-value如何均匀的分散到集群中?最常规的方式莫过于hash取模的方式.比如集群中可用机器适量为N,那么key值为K的 ...

  6. 零基础学python 视频_零基础入门学习PYTHON(第2版)(微课视频版)

    小甲鱼畅销图书重磅升级,针对Python 3.7,通过生动的实例,让读者在实践中理解概念,在轻松.愉快中学会Python! 本书提倡理解为主,应用为王.因此,只要有可能,小甲鱼(注:作者)都会通过生动 ...

  7. 相同的字符串哈希值一样吗_关于哈希,来看这里!

    我想跟着大家一起重新学习下关于哈希的一切--哈希.哈希函数.哈希表. 这三者有什么样的爱恨情仇? 为什么Object类中需要有一个hashCode()方法?它跟equals()方法有什么关系? 如何编 ...

  8. pycharm python部署_使用PyCharm配合部署Python的Django框架的配置纪实

    安装软件安装 Python 2.7.PyCharm.pip(Python包管理工具).Django ( pip install Django) 部署PyCharm 新建Django工程 完成后,其目录 ...

  9. 千锋python笔记_《2020千锋Python入门视频全套全开源》多实用

    确实,对于在学开发或者已经从事开发工作的小哥哥小姐姐来说,恋爱这个事还挺让人揪心的! 有对象的时候又怕嘴笨不会哄对象,总不能跟对象说你看我用代码给你画个心吧!没对象的用爬虫技术爬来各种小哥哥小姐姐的头 ...

最新文章

  1. python哪些是可变对象_什么是Python可变对象和不可变对象
  2. VTK:网格之ClipDataSetWithPolyData
  3. 第一类斯特林数学习记录
  4. 多进程fork()函数
  5. (原创总结) Quartus II 的在线调试方法
  6. 执行存储过程执行时,报ORA-01031权限不足
  7. SQL Serve权限管理
  8. 【OpenCV/C++】KNN算法识别数字的实现原理与代码详解
  9. 第十章 动态选录协议
  10. (转)什么是DevOps?阿里专家为你来解读
  11. IE浏览器打开闪退,崩溃的场景重置
  12. 计算机记笔记软件是什么,电脑记笔记软件哪个好(适合学生做笔记的软件)
  13. 电源的环路补偿、功率级补偿、Vout的波形对应的响应速度-运放环路补偿
  14. IIR数字滤波器原理与应用
  15. java 获取周六周日_JS实现获取当前所在周的周六、周日示例分析
  16. 中国数学的先行者—孙光远先生
  17. 《降伏其心》节选:从辟谷揭开修行的真相
  18. 【ROS】rosbag使用
  19. 如何重置或者去掉某个css属性值
  20. 华为交换机DHCP配置

热门文章

  1. k8s部署nginx集群
  2. ubuntu下载工具aria2 uGet
  3. redis所有版本下载地址
  4. centos下安装ruby,删除ruby
  5. mysql的分页查询
  6. java基础---流程控制
  7. 430. Flatten a Multilevel Doubly Linked List | 430. 扁平化多级双向链表(DFS)
  8. leetcode 628. Maximum Product of Three Numbers | 628. 三个数的最大乘积(Java)
  9. leetcode 492. 构造矩形(Java版,三种解法)
  10. ZooKeeper实战(三):ZooKeeper实现分布式配置中心、分布式锁、Reactive响应式模型