广告
返回顶部
首页 > 资讯 > 数据库 >redis的一致性hash和hash槽是什么
  • 368
分享到

redis的一致性hash和hash槽是什么

2024-04-02 19:04:59 368人浏览 八月长安
摘要

这篇文章主要讲解了“Redis的一致性hash和hash槽是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“redis的一致性hash和hash槽是什么”

这篇文章主要讲解了“Redis的一致性hash和hash槽是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“redis的一致性hash和hash槽是什么”吧!

redis的一致性hash和hash槽是什么

假如我们现在有x台缓存设备,我们在决定把数据放到哪个缓存设备上的时候可以key%x,但是如果发生扩容或者节点丢失你就需要key%(x±y)这样就会遇到大量的数据迁移问题,一致性hash和hash槽就可以避免这种问题。

一致性hash原理

普通的hash是对服务器的数量取余,一致性hash是对特定的数字取余(2^32)不会因为服务器的数量变化,首先我们对服务器的ip或者其他唯一标识取余得到一个值这个值就是服务器在hash环上的位置,然后对要放入服务器的对象进行hash得到一个值,在hash换上找对应的服务器如果值所在的位置没有服务器就看下一个位置是否服务器知道找到可存储的服务器。

1、环形空间

按照常用的hash算法来将对应的key哈希到一个具有2的32 次方个节点的空间中,即0 ~ (2的32)-1的数字空间中。我们可以把这个东西想象成一个咬住尾巴的,形成了一个闭环。
redis的一致性hash和hash槽是什么

2、服务器hash到环上

环有了我们现在需要把服务器放到环上,可以根据服务器的IP地址获取编号等唯一标识取hash后放到环上。
redis的一致性hash和hash槽是什么

3、数据存储和获取

当我们需要把一个数据放到服务器上的时候我们首先需要计算数据的hash值然后取余,如果取余后的值在环上有对应的服务器那直接放进去如果没有则向后查找。
redis的一致性hash和hash槽是什么
所以最后data1在redis1里面,data2在redis2里面。当我们获取数据的时候也是执行相同的过程,计算key的hash值,然后根据相同的规则获取存储的服务器。

4、服务器的删除和添加

如果现在某个redis节点挂掉了,那么其他节点里面的数据是还在的,原来节点里面的数据会被重新分配到下一个节点里面。
如果在环境中新增一台服务器RedisNeo,通过hash算法将RedisNeo映射到环中,通过按顺时针迁移的规则,那么以前hash值在Redis2和RedisNeo之间的数据迁移到RedisNeo里面(下图中RedisNeo挨着Redis2),其它对象还保持这原有的存储位置。通过对节点的添加和删除的分析,一致性哈希算法在保持了单调性的同时,还是数据的迁移达到了最小,这样的算法对分布式集群来说是非常合适的,避免了大量数据迁移,减小了服务器的的压力。
redis的一致性hash和hash槽是什么
所以redisNeo加入后data3就到redisNeo里面去了。

5、平衡性

到目前为止一致性hash也可以算做完成了,但是有一个问题还需要解决,那就是平衡性。从下图我们可以看出,当服务器节点比较少的时候,会出现一个问题,就是此时必然造成大量数据集中到一个节点上面,例如你只有两个节点一个在1另一个在10,那么很显然1节点的压力是无限大的,因为只有hash值在[2,10]之间的才会到10节点,其他的全到1节点上去了,为了解决这种数据倾斜问题,一致性哈希算法引入了虚拟节点机制,即对每一个服务节点计算多个哈希,每个计算结果位置都放置一个此服务节点,称为虚拟节点。具体做法可以先确定每个物理节点关联的虚拟节点数量,然后在ip或者主机名后面增加编号,同时数据定位算法不变,只是多了一步虚拟节点到实际节点的映射。

hash槽

哈希槽是在redis cluster集群方案中采用的,redis cluster集群没有采用一致性哈希方案,而是采用数据分片中的哈希槽来进行数据存储与读取的。redis cluster采用数据分片的哈希槽来进行数据存储和数据的读取。redis cluster一共有2^14(16384)个槽,所有的master节点都会有一个槽区比如0~1000,槽数是可以迁移的。master节点的slave节点不分配槽,只拥有读权限。但是注意在代码中redis cluster执行读写操作的都是master节点,并不是你想 的读是从节点,写是主节点。第一次新建redis cluster时,16384个槽是被master节点均匀分布的。
redis的一致性hash和hash槽是什么
和一致性哈希相比在扩容和缩容的时候需要手动手动分配hash槽,并且在删除master节点的时候要把他的从节点和hash槽交给其他master节点;hash槽的是根据CRC-16(key)%16384的值来判断属于哪个槽区。

感谢各位的阅读,以上就是“redis的一致性hash和hash槽是什么”的内容了,经过本文的学习后,相信大家对redis的一致性hash和hash槽是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

您可能感兴趣的文档:

--结束END--

本文标题: redis的一致性hash和hash槽是什么

本文链接: https://www.lsjlt.com/news/72661.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • redis的一致性hash和hash槽是什么
    这篇文章主要讲解了“redis的一致性hash和hash槽是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“redis的一致性hash和hash槽是什么”...
    99+
    2022-10-19
  • 什么是Java一致性Hash算法
    这篇文章主要介绍“什么是Java一致性Hash算法”,在日常操作中,相信很多人在什么是Java一致性Hash算法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是Java一...
    99+
    2022-10-19
  • 什么是数据库的读一致性和写一致性
    一、读一致性 读一致性是指在数据库中的并发读操作中,读取到的数据应该是一致的。具体来说,当一个事务在执行读取操作时,如果另一个事务正在对同一数据进行修改(写操作),那么读取操作应该获取到已经提交的最新版本的数据,而不是读取到部分修改完成的数...
    99+
    2023-10-29
    数据库 读一致性 写一致性
  • MySQL数据库和Redis缓存一致性的更新策略是什么
    这篇文章主要介绍“MySQL数据库和Redis缓存一致性的更新策略是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL数据库和Redis缓存一致性的更新策略是什么”文章能帮助大家解决问题。...
    99+
    2023-07-06
  • ​怎么保证Redis和数据库的一致性
    怎么保证Redis和数据库的一致性?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一般来说,只要你用到了缓存,不管是Redis还是memca...
    99+
    2022-10-18
  • 什么是事务的一致性
    什么是事务的一致性?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。事务的一致性是指:事务必须是使数据库从一个一致性状态变到另一个一致性状态。为了...
    99+
    2022-10-18
  • 保证Redis缓存与数据库一致性的方法是什么
    本文小编为大家详细介绍“保证Redis缓存与数据库一致性的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“保证Redis缓存与数据库一致性的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、四...
    99+
    2023-07-05
  • MySQL和Redis的数据一致性问题怎么解决
    本篇内容主要讲解“MySQL和Redis的数据一致性问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL和Redis的数据一致性问题怎么解决”吧!前言:在数据读多写少的情况下作为...
    99+
    2023-06-29
  • redis怎么实现数据存储和缓存的一致性
    redis怎么实现数据存储和缓存的一致性?针对这个问题,这篇文章给出了相对应的分析和解答,希望能帮助更多想解决这个问题的朋友找到更加简单易行的办法。方式1:数据库保存数据,redis不persist red...
    99+
    2022-10-18
  • mysqldump一致性热备的原理是什么
    mysqldump一致性热备的原理是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。首先用mysqldump执行一次一致性备份:$ ...
    99+
    2022-10-18
  • redis的四大特性和原理是什么
    本篇内容介绍了“redis的四大特性和原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、redi...
    99+
    2022-10-18
  • Redis中的缓存穿透、缓存雪崩、缓存击穿和缓存一致性怎么理解
    这篇文章主要介绍“Redis中的缓存穿透、缓存雪崩、缓存击穿和缓存一致性怎么理解”,在日常操作中,相信很多人在Redis中的缓存穿透、缓存雪崩、缓存击穿和缓存一致性怎么理解问题上存在疑惑,小编查阅了各式资料...
    99+
    2022-10-19
  • 数据库缓存最终一致性的四种方案分别是什么
    这篇文章将为大家详细讲解有关数据库缓存最终一致性的四种方案分别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。背景缓存是软件开发中一个非常有用的概念,数...
    99+
    2022-10-19
  • Android、iPhone和Java三个平台一致的加密方法是什么
    这篇文章将为大家详细讲解有关Android、iPhone和Java三个平台一致的加密方法是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。先前一直在做安卓,最近要开发iPhone客户端,这...
    99+
    2023-06-17
  • Java锁的膨胀过程以及一致性哈希对锁膨胀的影响是什么
    这篇文章给大家分享的是有关Java锁的膨胀过程以及一致性哈希对锁膨胀的影响是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、锁优化在JDK6之前,通过synchronized来实现同步效率是很低的,被syn...
    99+
    2023-06-29
  • gitlab提交信息与账号注册不一致的原因和解决方法是什么
    本篇内容介绍了“gitlab提交信息与账号注册不一致的原因和解决方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、为什么会发生提交...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作