Redis的一致性哈希算法
一.节点取余
根据redis的键或者ID,再根据节点数量进行取余。
key:value如下
name:1 zhangsna:18:北京
对name:1 进行hash操作,得出来得值是2423423452,用这个值除3,余1则放到1号节点中进行存储,余2则放到2号节点存储。
二.一致性hash
一致性哈希分区(Distributed Hash Table) 实现思路是为系统中每个节
点分配一个token, 范围一般在0~232, 这些token构成一个哈希环。 数据读写
执行节点查找操作时, 先根据key计算hash值, 然后顺时针找到第一个大于
等于该哈希值的token节点, 如图10-3所示

这种方式相比节点取余最大的好处在于加入和删除节点只影响哈希环中
相邻的节点, 对其他节点无影响。 但一致性哈希分区存在几个问题:
·加减节点会造成哈希环中部分数据无法命中, 需要手动处理或者忽略
这部分数据, 因此一致性哈希常用于缓存场景。
当使用少量节点时, 节点变化将大范围影响哈希环中数据映射, 因此
这种方式不适合少量数据节点的分布式方案。
·普通的一致性哈希分区在增减节点时需要增加一倍或减去一半节点才
能保证数据和负载的均衡。
传统的取模方式
例如10条数据 0 1 2 3 4 5 6 7 8 9
3个节点node a b c
如果按照取模的方式,那就是
node a: 0,3,6,9
node b: 1,4,7
node c: 2,5,8
当增加一个节点的时候,数据分布就变更为
node a:0,4,8
node b:1,5,9
node c: 2,6
node d: 3,7
总结:数据3,4,5,6,7,8,9在增加节点的时候,都需要做搬迁,成本太高
而搬迁就是从节点a的机器上把数据移动到节点d上
一致性哈希方式
最关键的区别就是,对节点和数据,都做一次哈希运算,然后比较节点和数据的哈希值,数据取和节点最相近的节点做为存放节点。这样就保证当节点增加或者减少的时候,影响的数据最少。
十条数据,算出各自的哈希值,(这里就不变了,实际上要经过一系列计算)
0 : 0
1 : 1
2 : 2
3 : 3
4 : 4
5 : 5
6 : 6
7 : 7
8 : 8
9 : 9
有三个节点,算出各自的哈希值
node a: 3
node b: 5
node c: 7
这个时候比较两者的哈希值,5等于b,则归属b,4小于b,归属b,3等于a,则归属a,最后所有大于c的,归属于c(这里只是模拟)
相当于整个哈希值就是一个环,对应的映射结果:
node a: 0,1,2,3
node b: 4,5
node c: 6,7,8,9
这个时候加入node d, 就可以算出node d的哈希值:
node d: 9
这个时候对应的数据就会做迁移:
node a: 0,1,2,3
node b: 4,5
node c: 6,7
node d: 8,9
只有最后8,9这2条数据被存储到新的节点,其他不变
三.虚拟槽分区
虚拟槽分区巧妙地使用了哈希空间, 使用分散度良好的哈希函数把所有
数据映射到一个固定范围的整数集合中, 整数定义为槽(slot) 。 这个范围
一般远远大于节点数, 比如Redis Cluster槽范围是0~16383。 槽是集群内数据
管理和迁移的基本单位。 采用大范围槽的主要目的是为了方便数据拆分和集
群扩展。 每个节点会负责一定数量的槽, 如图10-4所示。
当前集群有5个节点, 每个节点平均大约负责3276个槽。 由于采用高质
量的哈希算法, 每个槽所映射的数据通常比较均匀, 将数据平均划分到5个
节点进行数据分区。 Redis Cluster就是采用虚拟槽分区, 下面就介绍Redis数
据分区方法。
redis将每个数据放到一个槽中,而很多槽放到节点中。当槽进行扩容,只需要把某些槽迁移到新节点即可。
Redis的一致性哈希算法的更多相关文章
- _00013 一致性哈希算法 Consistent Hashing 新的讨论,并出现相应的解决
笔者博文:妳那伊抹微笑 博客地址:http://blog.csdn.net/u012185296 个性签名:世界上最遥远的距离不是天涯,也不是海角,而是我站在妳的面前.妳却感觉不到我的存在 技术方向: ...
- (转)每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)
背景:在redis集群中,有关于一致性哈希的使用. 一致性哈希:桶大小0~(2^32)-1 哈希指标:平衡性.单调性.分散性.负载性 为了提高平衡性,引入“虚拟节点” 每天进步一点点——五分钟理解一致 ...
- 一致性哈希算法(consistent hashing)PHP实现
一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简单哈希 ...
- 一致性哈希算法与Java实现
原文:http://blog.csdn.net/wuhuan_wp/article/details/7010071 一致性哈希算法是分布式系统中常用的算法.比如,一个分布式的存储系统,要将数据存储到具 ...
- 五分钟理解一致性哈希算法(consistent hashing)
转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法 ...
- 每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)
转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT) ...
- 一致性哈希算法以及其PHP实现
在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括: 轮循算法(Round Robin).哈希算法(HASH).最少连接算法(Least Connection).响应速度算法(Respons ...
- Java_一致性哈希算法与Java实现
摘自:http://blog.csdn.net/wuhuan_wp/article/details/7010071 一致性哈希算法是分布式系统中常用的算法.比如,一个分布式的存储系统,要将数据存储到具 ...
- 一致性哈希算法(consistent hashing)【转】
一致性哈希算法 来自:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希 ...
随机推荐
- PLSQL 删表 恢复
1.查看你删除的是哪张表(SQL 中的时间是删表时的时间 (我删表的时间 大概是:2019-08-16 08:47:00 之后 )): select * from user_recy ...
- 如何用webgl(three.js)搭建一个3D库房,3D密集架,3D档案室(升级版)
很长一段时间没有写3D库房,3D密集架相关的效果文章了,刚好最近有相关项目落地,索性总结一下 与之前我写的3D库房密集架文章<如何用webgl(three.js)搭建一个3D库房,3D密集架,3 ...
- DECODE 与CASE WHEN 的比较
1.DECODE 只有Oracle 才有,其它数据库不支持; 2.CASE WHEN的用法, Oracle.SQL Server. MySQL 都支持; 3.DECODE 只能用做相等判断,但是可以配 ...
- [luogu5464]缩小社交圈
不难证明合法当且仅当满足一下两个条件: 1.每一个位置最多被覆盖两次(无环) 2.将选择的区间按左端点从小到大排序,对于每一个左端点,其之前的区间的最大右端点不小于其(连通) (关于第一个的充分性证明 ...
- [atARC080F]Prime Flip
构造一个数组$b_{i}$(初始为0),对于操作$[l_{i},r_{i}]$,令$b_{l_{i}}$和$b_{r_{i}+1}$值异或1,表示$i$和$i-1$的差值发生改变,最终即要求若干个$b ...
- [bzoj1077]天平
先考虑如何求出任意两数的最大差值和最小差值,直接差分约束建图跑floyd求最短路和最长路即可然后枚举i和j,考虑dA+dB和di+dj的关系,分两种情况移项,转化成dA-di和dj-dB的关系或dA- ...
- [JS高程]JavaScript中的RegExp对象
目录 1. RegExp 1.1 表示格式: 1.2 匹配模式: 1.3 RegExp 实例属性 1.4 RegExp 实例方法 1.4.1 exec() 1.4.1.1 基本用法 1.4.1.2 e ...
- 洛谷 P7323 - [WC2021] 括号路径(启发式合并)
题面传送门 emmmm----怎么评价这个题嘛...感觉纯论算法,此题根本谈不上难题,不过 WC 时候太智障只拿了个 48pts 就走人了.总之,技不如人,甘拜吓疯( 首先要注意到几件事情: 如果 \ ...
- 解决 Ubuntu 下 gedit编辑器打开文件出现中文乱码问题
解决 Ubuntu 中 gedit编辑器打开文件出现中文乱码问题 1. 问题分析 在 windows 系统下,.txt 文件默认编码方式为 gb18030 格式的中文编码,而 gedit 默认的编码方 ...
- 【机器学习与R语言】6-线性回归
目录 1.理解回归 1)简单线性回归 2)普通最小二乘估计 3)相关系数 4)多元线性回归 2.线性回归应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估模型 5)提高模型性能 1.理 ...