大家好,我是楼仔!
Redis 的高可用,太重要啦!之前找工作面试,这个问题面试的频率都能排到前几,尤其是一些大厂,先不要着急看文章,如果面试官给你抛这么个问题,你会怎么回答呢,可以先想 5 分钟。
这里要等待 5 分钟 ...
其实我也可以偷个懒,完全转载其它博客,但是没有找到我想要的,为了不辜负广大粉丝,楼哥还是单独给大家写一篇,主要根据这块知识,再结合之前的一些面试情况,给大家唠唠。
1. Redis 分片策略
1.1 Hash 分片
我们都知道,对于 Redis 集群,我们需要通过 hash 策略,将 key 打在 Redis 的不同分片上。
假如我们有 3 台机器,常见的分片方式为 hash(IP)%3,其中 3 是机器总数。
目前很多小公司都这么玩,上手快,简单粗暴,但是这种方式有一个致命的缺点:当增加或者减少缓存节点时,总节点个数发生变化,导致分片值发生改变,需要对缓存数据做迁移。
那如何解决该问题呢,答案是一致性 Hash。
1.2 一致性 Hash
一致性哈希算法是 1997 年由麻省理工学院提出的一种分布式哈希实现算法。
环形空间:按照常用的 hash 算法来将对应的 key 哈希到一个具有 2^32 次方个桶的空间中,即 0~(2^32)-1 的数字空间中,现在我们可以将这些数字头尾相连,想象成一个闭合的环形。
Key 散列 Hash 环:现在我们将 object1、object2、object3、object4 四个对象通过特定的 Hash 函数计算出对应的 key 值,然后散列到 Hash 环上。
机器散列 Hash 环:假设现在有 NODE1、NODE2、NODE3 三台机器,以顺时针的方向计算,将所有对象存储到离自己最近的机器中...
回复