因为不懂Redis集群,我被diss了

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
注册配置 MSE Nacos/ZooKeeper,118元/月
性能测试 PTS,5000VUM额度
简介: Redis官方在官网里写着霸气的宣传语:从构建者那里获取世界上最快的内存数据库。相信国内没用Redis的科技公司也屈指可数。现在Redis已经走向了商业化,它所属的公司叫Redis Ltd。不过可惜的是Redis创始人在2020年就离开了Redis Labs,那个留着乱糟糟黑色头发的中年男人就是Redis的创始人。Redis的商业推广仍在继续着,大家要去现场看看嘛。大家好,我是南哥。一个Java学习与进阶的领路人,相信对你通关面试、拿下Offer进入心心念念的公司有所帮助。

点赞再看,Java进阶一大半

Redis官方在官网里写着霸气的宣传语:从构建者那里获取世界上最快的内存数据库Get the world’s fastest in-memory database from the ones who built it。南哥相信国内没用Redis的科技公司也屈指可数。

在这里插入图片描述

现在Redis已经走向了商业化,它所属的公司叫Redis Ltd。不过可惜的是Redis创始人Salvatore Sanfilippo在2020年就离开了Redis Labs,那个留着乱糟糟黑色头发的中年男人就是Redis的创始人。

Redis的商业推广仍在继续着,今年8月29号新加坡就有Redis演讲活动,大家要去现场看看嘛。

大家好,我是南哥。

一个Java学习与进阶的领路人,相信对你通关面试、拿下Offer进入心心念念的公司有所帮助。

1. Redis集群

1.1 集群概念

面试官:我看你简历写了Redis集群,你说一说?

Redis主从架构和Redis集群架构是两种不同的概念,大家刚接触Redis时经常弄混淆。南哥给大家贴下Redis官网对两者的解释。

(1)Redis主从架构

Redis主从实现了有一个易于使用和配置的领导者跟随者复制,它允许副本 Redis 实例成为主实例的精确副本。

(2)Redis集群架构

Redis 集群将数据自动分片到多个 Redis 节点,Redis 集群还在分区期间提供一定程度的可用性,当某些节点发生故障或无法通信时,Redis集群能够继续运行。

它们两者都是Redis高可用的解决方案,但偏向点不同。Redis主从对数据的完整性更看重,Redis主从节点都保存了完整的一套数据库状态。

而Redis集群则对抗压能力更看重,整个集群的数据库整合起来才是一个完整的数据库。

在功能性上它们也有不同,Redis主从有哨兵,而Redis集群有分片。我们要看业务选择不同的Redis方案,当然,Redis集群还可以搭配Redis主从一起使用,我们可以在某一个集群节点上配置一套主从模型。

如果要6002、6003节点添加到6001节点的Redis集群里,我们可以使用以下命令。

127.0.0.1:6001> CLUSTER MEET 127.0.0.1 6002
OK
127.0.0.1:6001> CLUSTER MEET 127.0.0.1 6003
OK

1.2 集群分片

面试官:那Redis集群怎么实现负载均衡的?

大家要记住Redis集群一个很重要的知识点,那就是分片。

Redis集群通过分片的方式来保存数据库中的键值对,Redis集群把整个数据库分为16384个槽,而集群中的每个节点可以处理这里面的0个或最多16384个槽。

假如南友们在公司里配置了一个包含 3 个节点的集群,那么这3个节点的槽分配会是这样的:

  • 节点 A 包含从 0 到 5500 的哈希槽。
  • 节点 B 包含从 5501 到 11000 的哈希槽。
  • 节点 C 包含从 11001 到 16383 的哈希槽。

那这样分片有什么作用?

大家想一想,有了分片,我们对某一个键值对的增删改查就会在三个集群节点中的其中一个进行,这样对Redis的各种操作也就负载均衡地下落到各个集群的节点中。

1.3 重新分片

面试官:要是热点数据都是某个Redis节点的槽,负载均衡不是没用了?

Redis集群甚至可以在线上环境直接执行重新分片功能,分片是不是很灵活呢?南哥给Redis点赞。

Redis官网对分片是这么解释的。

Moving hash slots from a node to another does not require stopping any operations; therefore, adding and removing nodes, or changing the percentage of hash slots held by a node, requires no downtime.

将哈希槽从一个节点移动到另一个节点不需要停止任何操作;因此,添加和删除节点,或更改节点持有的哈希槽百分比,不需要停机。

Redis集群重新分片可以将任意数量已指派给某个节点的槽改为指派给另一个节点,而相关槽所属的键值对也会从源节点被移动到目标节点。重新分片操作也不需要集群节点下线,源节点和目标节点也都可以继续处理命令请求。

要是小伙伴遇到热点数据都精确命中了Redis集群的某一个节点,赶快在线上环境紧急重新分片,把相关热点槽指派给其他节点处理,这也是一个不错的选择。

2. 集群的主从模型

2.1 主从模型

面试官:Redis集群的主从模型,知道吗?

还记得上文南哥提到过可以给Redis集群的某一个节点配置主从模型吗?

Redis集群把键值都分散在多个集群节点中,这也有缺点。例如某一个节点失效了,那这个节点里所有槽的键值对也都无法访问了。Redis官方当然也知道,主从模型可以让集群节点有1~N个副本节点。

像上文的Redis集群的A、B、C三个节点,主从模型可以为这每一个主节点添加一个副本节点。这样的话集群就变成了由A、B、C、A1、B1、C1组成,例如当A节点失效了,那它的副本节点A1就会提升为新的主节点。

主从模型也有另外的好处,我们可以让主节点用于处理槽,而副本节点用来分担读的压力

在这里插入图片描述

为集群B节点添加B1、B2副本节点

2.2 主节点选举

面试官:那集群里怎么选举主节点的?

Redis集群的主从模型选举主节点和Redis哨兵选举出主节点非常相似,但大家不要搞混了,Redis集群中并没有哨兵的概念。

主从模型选举主节点和哨兵选举领头哨兵一样是先到先得,而且它们投票的对象是集群中的其他主节点

选举的流程如下。

(1)当从节点发现主节点进入下线状态时,会广播一条CLUSTERMSG_TYPE_FAILOVER_AUTH_REQUEST消息,要求其他集群主节点向改从节点进行投票。

(2)投票遵循先到先得的规则,集群主节点会投票给第一个发送选举信息的该从节点,返回一条CLUSTERMSG_TYPE_FAILOVER_AUTH_ACK消息。

(3)如果集群主节点的个数是N,当某个从节点收到大于等于N / 2 + 1张支持票时,代表该从节点获胜,该从节点也将成为新的主节点。

最后

本文收录在我开源的《Java学习进阶指南》中,涵盖了在大厂工作的Javaer都不会不懂的核心知识、面试重点。相信能帮助到大家在Java成长路上不迷茫,南哥希望收到大家的 ⭐ Star ⭐支持我完善下去。GitHub地址:https://github.com/hdgaadd/JavaProGuide

在这里插入图片描述

欢迎关注南哥的公众号:Java进阶指南针。公众号里有南哥珍藏整理的大量优秀pdf书籍,也欢迎南友加入我们私密的Java学习进阶圈子!

我是南哥,南就南在Get到你的有趣评论➕点赞➕关注。

创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6月前
|
NoSQL Redis Sentinel
【怒怼大厂面试官】听说你精通Redis?说说Redis哨兵
面试官:Redis哨兵知道吧?知道的,Sentinel哨兵本质是一个运行在特殊模式下的Redis服务器。面试官:嗯然后呢?它的主要作用是通过检测Redis主从服务器的下线状态,选举出新Redis主服务器,也就是故障转移,来保证Redis的高可用性。
107 4
【怒怼大厂面试官】听说你精通Redis?说说Redis哨兵
|
6月前
|
NoSQL Redis
【怒怼大厂面试官】听说你精通Redis?Redis数据同步懂吗
面试官:不用慌尽管说,错了也没关系。。。来说说Redis数据同步。是这样的,Redis有一个叫命令传播的概念,如果像面试官说的这种场景,再使用上面我提到的AOF缓冲区就有点浪费内存空间了。所以Redis会将主服务器的这条Del删除命令
【怒怼大厂面试官】听说你精通Redis?Redis数据同步懂吗
|
NoSQL 算法 Java
Redis魔法:点燃分布式锁的奇妙实现
Redis魔法:点燃分布式锁的奇妙实现
325 0
|
存储 缓存 NoSQL
Redis面试18问,看完,把面试官按在地上暴打摩擦!
面试官:今天要不来聊聊Redis吧? 候选者:好 候选者:我个人是这样理解的:无论Redis也好、MySQL也好、HDFS也好、HBase也好,他们都是存储数据的地方 候选者:因为它们的设计理念的不同,我们会根据不同的应用场景使用不同的存储 候选者:像Redis一般我们会把它用作于缓存候选者:当然啦,日常有的应用场景比较简单,用个HashMap也能解决很多的问题了,没必要上Redis候选者:这就好比,有的单机限流可能应对某些场景就够用了,也没必要说一定要上分布式限流把系统搞得复杂
163 0
|
缓存 NoSQL Dubbo
京东三面惨遭被虐,关于redis,高并发,分布式,微服务一窍不通
三面大概九十分钟,问的东西很全面,需要做充足准备,就是除了概念以外问的有点懵逼了(呜呜呜~)。回来之后把这些题目做了一个分类并整理出答案(强迫症的我~狂补知识~)分为redis缓存,高并发,分布式,微服务等,接下来分享一下我的这京东面试的面经+一些我的学习笔记。
|
NoSQL Redis
redis驯不好,骑你头上跑
redis驯不好,骑你头上跑
53 0
|
消息中间件 存储 缓存
搭了一个RocketMQ高可用集群,同事直呼哇塞!
搭了一个RocketMQ高可用集群,同事直呼哇塞!
|
存储 NoSQL 网络安全
面试问Redis集群,被虐的不行了......(2)
面试问Redis集群,被虐的不行了......
184 2
面试问Redis集群,被虐的不行了......(2)
|
缓存 负载均衡 NoSQL
实现服务高可用奇淫技巧(一)
实现服务高可用奇淫技巧(一)
185 0
实现服务高可用奇淫技巧(一)
|
存储 NoSQL Linux
面试问Redis集群,被虐的不行了......(1)
面试问Redis集群,被虐的不行了......
163 1
面试问Redis集群,被虐的不行了......(1)