哈希和一致性哈希

本文介绍了哈希算法的基本概念,包括哈希冲突及其解决方案。重点讲解了一致性哈希算法,阐述了其在解决节点增减时的数据迁移问题,以及如何通过虚拟节点解决数据倾斜。此外,还讨论了Redis集群分槽的实现,指出其与一致性哈希的区别与联系。
摘要由CSDN通过智能技术生成

什么是哈希

Hash,一般翻译做散列、杂凑,或音译为哈希,是指把任意长度的输入(又叫做预映射pre-image)通过哈希算法变换成固定长度的输出的过程,该输出就是哈希值。

哈希算法(哈希函数)

哈希算法指的是能把任意长度的输入变换成固定长度输出的一系列算法。大家都知道数学中的函数如y=x+1, 通过改变x的值,我们可以得到对应的y。哈希函数其实也一样,通过传入不同的输入得到对应的输出,不同的是哈希函数的输入不仅限于数学中的数字,并且它的输出是固定长度的,具有一定规则的。常见的哈希算法有MD5, SHA-1, SHA-2, UUID1, UUID…

哈希冲突

理论上哈希算法输入跟输出的映射关系应该是一对一的,但是会有一定概率出现多个输入对应一个输出,即不同的x值得到了同样的y值,这种情况叫哈希冲突。解决哈希冲突也有许多常见的方法,比如拉链法,线性探查法…可以自行去了解

哈希取模

哈希取模是指对hash结果取余。假设我们现在需要对数据库进行分表分库。需要把user表分成10个表,这时我们只需对user_id进行哈希取模,即user_id.hash() % 10, 假设user_id.hash()等于12, 则把该记录存入第2(12 % 10 = 2)个表中。取值的时候重复上面步骤即可知道从哪个表查询我们想要的数据了。但是假设我们的用户有激增了,我们需要从10个表分成20个表,这个时候我们通过user_id.hash()%20去查数据肯定查不到之前的数据了,应为之前是通过user_id.hash() % 10去存储的。要解决这个问题ÿ

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值