前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >redis原理(3)

redis原理(3)

原创
作者头像
陈不成i
修改2021-05-20 14:21:05
2930
修改2021-05-20 14:21:05
举报
文章被收录于专栏:ops技术分享

传统的取模方式

例如10条数据 0 1 2 3 4 5 6 7 8 9

3个节点node a b c

如果按照取模的方式,那就是

  1. node a: 0,3,6,9
  2. node b: 1,4,7
  3. node c: 2,5,8

当增加一个节点的时候,数据分布就变更为

  1. node a:0,4,8
  2. node b:1,5,9
  3. node c: 2,6
  4. node d: 3,7

总结:数据3,4,5,6,7,8,9在增加节点的时候,都需要做搬迁,成本太高

而搬迁就是从节点a的机器上把数据移动到节点d上

一致性哈希方式 最关键的区别就是,对节点和数据,都做一次哈希运算,然后比较节点和数据的哈希值,数据取和节点最相近的节点做为存放节点。这样就保证当节点增加或者减少的时候,影响的数据最少。

十条数据,算出各自的哈希值,(这里就不变了,实际上要经过一系列计算)

  1. 0 : 0
  2. 1 : 1
  3. 2 : 2
  4. 3 : 3
  5. 4 : 4
  6. 5 : 5
  7. 6 : 6
  8. 7 : 7
  9. 8 : 8
  10. 9 : 9

有三个节点,算出各自的哈希值

  1. node a: 3
  2. node b: 5
  3. node c: 7

这个时候比较两者的哈希值,5等于b,则归属b,4小于b,归属b,3等于a,则归属a,最后所有大于c的,归属于c(这里只是模拟)

相当于整个哈希值就是一个环,对应的映射结果:

  1. node a: 0,1,2,3
  2. node b: 4,5
  3. node c: 6,7,8,9

这个时候加入node d, 就可以算出node d的哈希值: node d: 9

这个时候对应的数据就会做迁移:

  1. node a: 0,1,2,3
  2. node b: 4,5
  3. node c: 6,7
  4. node d: 8,9

只有最后8,9这2条数据被存储到新的节点,其他不变

三.虚拟槽分区

虚拟槽分区巧妙地使用了哈希空间, 使用分散度良好的哈希函数把所有 数据映射到一个固定范围的整数集合中, 整数定义为槽(slot) 。 这个范围 一般远远大于节点数, 比如Redis Cluster槽范围是0~16383。 槽是集群内数据 管理和迁移的基本单位。 采用大范围槽的主要目的是为了方便数据拆分和集 群扩展。 每个节点会负责一定数量的槽, 如图10-4所示。

当前集群有5个节点, 每个节点平均大约负责3276个槽。 由于采用高质 量的哈希算法, 每个槽所映射的数据通常比较均匀, 将数据平均划分到5个 节点进行数据分区。 Redis Cluster就是采用虚拟槽分区, 下面就介绍Redis数 据分区方法。

redis将每个数据放到一个槽中,而很多槽放到节点中。当槽进行扩容,只需要把某些槽迁移到新节点即可。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 三.虚拟槽分区
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档