美文网首页
redis 数据分区--一致性hash&&虚拟槽分区

redis 数据分区--一致性hash&&虚拟槽分区

作者: Audience0 | 来源:发表于2020-10-21 13:15 被阅读0次

1.节点区域分区:
使用特定的数据,如redis的键或用户ID,再根据节点数量N使用公式:hash(key)%N计算出hash值,用来决定数据映射到哪一个节点上.

这种方案的问题是:
当节点数量变化时,需要重新计算hash,会导致数据的重新迁移.

2.一致性hash算法
一致性hash算法实现思路是为系统中每一个节点分配一个token,范围在0~2^32,这些token构成一个hash环.数据的读写执行节点查找操作时,先根据key计算hash值,然后顺时针找到第一个大于等于该hash的token节点.

好处:
这种方式最大的好处就是,在加入或删除节点时,只影响hash环中相邻的两个节点,对其他节点无影响.

问题:


image.png

3.虚拟槽算法

使用分散度较好的hash函数,将所有的数据映射到 比如0~16383(2^14)范围的槽中(slot).这个槽的数量一般远远大于实例的数量.

槽是集群数据管理和迁移的基本单位.采用大范围槽的主要目的是为了方便数据拆分和集群扩展.

每一个实例会映射一部分范围的槽.

特点:
1.解耦数据和节点之间的关系,简化扩容和锁容的难度
2.节点自身维护槽的映射关系,不需要客户端或代理服务维护槽分区的元数据.
3.支持节点,槽,键之间的映射查询,用于数据路由,在线伸缩灯场景.

HashTags(面试)
Mset k1 v1 k2 v2 k3 v3
通过分片手段,可以将数据合理的划分到不同的节点上,这本来是一件好事。但是有的时候,我们希望对相关联的业务以原子性方式进行操作。举个简单的例子
我们在单节点上执行MSET (m表示多个,一次向redis设置多个key和值), 它是一个原子性的操作,我们要求所有给定的key要在同一时间内被设置,不能出现某些指定的key被更新另一些指定的key没有被更新的情况。但是在集群环境下,我们仍然可以执行MSET命令,但它的操作不在是原子操作,会存在某些指定的key被更新,而另外一些指定的key没有改变,原因是多个key可能会被分配到不同的机器上。
所以,这里就会存在一个矛盾点,及要求key尽可能的分散在不同机器,又要求某些相关联的key分配到相同机器。
这个也是在面试的时候会容易被问到的内容。怎么解决呢?
从前面的分析中我们了解到,分片其实就是一个hash的过程,对key做hash取模然后划分到不同的机器上。所以为了解决这个问题,我们需要考虑如何让相关联的key得到的hash值都相同呢?如果key全部相同是不现实的,所以怎么解决呢?在redis中引入了HashTag的概念,可以使得数据分布算法可以根据key的某一个部分进行计算,然后让相关的key落到同一个数据分片;
举个简单的例子,假如对于用户的信息进行存储,
redis:store:1001、redis:store:1002
那么通过hashtag的方式,
redis:{store}:1001、redis:{store}:1002; 表示
当一个key包含 {} 的时候,就不对整个key做hash,而仅对 {} 包括的字符串做hash。

相关文章

  • redis 数据分区--一致性hash&&虚拟槽分区

    1.节点区域分区:使用特定的数据,如redis的键或用户ID,再根据节点数量N使用公式:hash(key)%N计算...

  • redis集群

    一、数据分布 1. Redis数据分区 Redis Cluser采用虚拟槽分区,所有的键根据哈希函数映射到0~16...

  • Redis 集群

    虚拟槽分区 redis集群使用的是基于hash的一种分区算法,称之为虚拟槽分区。 虚拟槽算法巧妙地使用了哈希空间,...

  • redis学习笔记(五) 集群

    1. 数据分布 Redis Cluster采用虚拟槽对数据进行分区。虚拟槽使用分散度良好的哈希函数把所有的数据均匀...

  • Redis集群

    集群 节点 一致性hash 哈希槽 异步复制 网络分区 Redis的集群方案 redis cluster...

  • Redis 分区

    Redis 分区 分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集。 分区的优势 ...

  • Redis 分区,多数据库实现

    Redis 分区 分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集。 分区的优势 ...

  • redis 集群数据分区

    一.数据分区的介绍 将全部数据根据分区规则分成多个子集并存储到redis中 二.数据分区的方式 1.顺序分布 特点...

  • Mac多端口搭建redis集群

    集群(Redis Cluster)作用: 1.数据分区: 数据分区(或称数据分片)是集群最核心的功能,集群将数据分...

  • Hive 分区/分桶

    分区/桶 Hive 分区 Hive的分区方式:由于Hive实际上是数据文件在HDFS存在的目录区分分区字段是虚拟列...

网友评论

      本文标题:redis 数据分区--一致性hash&&虚拟槽分区

      本文链接:https://www.haomeiwen.com/subject/flgbuhtx.html