【Redis】Redis面试热点

Redis 集群有哪些方案?

主从复制:解决了高并发问题
哨兵模式:解决了高并发,高可用问题
分片集群:解决了海量数据存储,高并发写的问题

主从复制

图示:

在这里插入图片描述
主从复制:单节点 Redis 并发能力有限,为了进一步提高 redis 并发能力,所以搭建主从集群,实现读写分离。主节点是写,从节点是读,这就是主从复制
主从同步流程,分为两种情况,分为全量同步增量同步

全量同步

在这里插入图片描述

根据上图:

  1. 同步的时候,从节点首先会和 master 节点建立连接,携带replid、offset请求数据同步
  2. master 节点会判断是否第一次同步(是根据 replid 来进行判断)。
  3. 如果说是第一次,那么 master 就会返回 master 的数据版本信息(并且还会返回 replid 和 offset),进而从节点进行保存版本信息。
  4. 接下来 master 节点会执行 bgsave 命令,生成 RDB 文件,并发送给从节点。
  5. 从节点清空本地数据,加载 RDB 文件。
  6. 到这里,所有流程其实完毕了,但是在执行 bgsave 命令期间,肯定是会有新的命令执行的。所以说,在 master 节点执行 bgsave 命令期间,还会在 repl_baklog 中记录这期间所有命令,并发送给从节点,从节点收到后执行命令。这样就保证数据不会丢失。
  7. 假如根据 replid 判断发现不是第一次同步,那么这个时候就需要用到 offset 了。根据 offset 来进行判断偏移量,然后再次进行同步。

增量同步

在这里插入图片描述

从节点发送同步请求,master 节点判断 replid 是否一致(肯定是一致的),不是第一次同步就会去日志文件中获取 offset 后的数据,然后发送repl_baklog文件中 offset 后的命令,从节点执行命令即可。

哨兵模式

主从复制解决了高并发问题,但是我们能保证Redis不宕机么?那万一宕机了,我们又怎么知道呢?那么就引入哨兵模式,哨兵模式的引入就保证了Redis的高可用问题。
哨兵模式三个作用:监控,自动故障恢复,通知

在这里插入图片描述

服务状态监控

在这里插入图片描述

哨兵模式中有心跳机制,每隔1s会向集群中每个实例发送ping命令,如果回复pong,那就说明OK。如果某一个哨兵发现某一个实例在一定时间里没有回应,那么认为该实例是主观下线。若是超过一定数量(最好是超过哨兵实例数量的一半。)的哨兵都认为这个实例主观下线,那么这个实例客观下线

脑裂

脑裂:主节点、从节点、哨兵处于不同网络分区,导致哨兵没有感知到主节点,所以哨兵又选举出了一个从节点为主,这样就存在了两个master,这样导致客户端还在老的主节点那里写数据,新节点无法同步。当网络恢复后,哨兵将老的主节点降为从节点,这是再从新的主节点同步数据,就会导致数据丢失。
解决办法:修改Redis的配置,设置最少的从节点数量以及缩短主从数据同步的延迟时间,达不到要求就拒绝请求。

分片集群

虽然主从复制保证了高并发,哨兵模式保证了高并发和高可用,但是海量数据存储、高并发写的问题并没有解决,那么分片集群就是为了解决上述两个问题。
图示:

在这里插入图片描述

  • 集群中有多个master,每个master保存不同数据
  • 每个master都可以有多个从节点
  • master之间通过ping监测彼此健康状态(就不需要哨兵存在了)
  • 客户端请求可以访问集群任意节点,最终都会被转发到正确节点

分片集群-数据读写

换句话说,分片集群中有很多Master节点,那么 Redis 集群在存储/读取数据时如何确定选择哪个节点呢?

解决方案:

  • Redis分片集群引入了哈希槽的概念,Redis集群有16384个哈希槽
  • 将16384个槽分配到不同的实例
  • 读写数据:根据key的有效部分(有效部分:如果key前面有大括号,大括号的内容就是有效部分;如果没有,就以key本身作为有效部分)计算哈希值,对16384取余,余数作为插槽,寻找插槽所在实例

Redis 是单线程的,为什么那么快?

  1. Redis纯内存操作,操作速度非常快
  2. Redis采用单线程,避免不必要的上下文切换可竞争条件,多线程还要考虑线程安全问题。
  3. Redis采用IO多路复用模型

什么是 I/O 多路复用模型?

Redis 是纯内存操作,执行速度非常快,它的性能瓶颈是网络延迟,而不是执行速度。 I/O 多路复用模型就是为了实现高效的网络请求

在这里插入图片描述

注意:有些时候,我们可能看到说Redis6.0之后引入多线程,在这里引入多线程要明白,是指接收网络请求,指令转换的那一部分采用多线程,是为了进一步解决网络瓶颈,并不是执行命令的时候。Redis执行命令依旧是单线程

面试题:

在这里插入图片描述

参考链接

https://www.bilibili.com/video/BV1yT411H7YK?p=19

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/614247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NPN PNP SS8050 SS8550 S8050

SS8050的使用及引脚判断方法 今天讲的是NPN型三极管SS8050,主要分为以下几个方面: 一、前言 二、SS8050简介 三、NPN三极管与PNP三极管 四、三极管管脚识别方法 五、不拆卸三极管判断其好坏 六、S8050和SS8050的区别 七、三极管与MOS管的区别 八…

nginx基础面试题以及配置文件解析和命令控制

目录 1、nginx是什么 2、nginx的特点 3、为什么中国大陆有:百度、京东、新浪、网易、腾讯、淘宝等这么多用户使用nginx 4、nginx 的内部技术架构 上一期我们配置安装了nginx接着讲一下nginx配置文件的解析和nginx 命令控制 感谢观看!希望能够帮助到…

mapper向mapper.xml传参中文时的乱码问题

1.起因: 在idea中进行模糊查询传参时,发现在idea中查中文查不出记录,在navicate中可以查出来。 2.猜测: 1.idea中的编码问题导致的乱码。 2.idea和navicate的编码一致性导致的乱码。 3.mapper向mapper.xml传参后出现乱码。 3.解…

Python 基础【八】--数据类型-字典【2024.1.11】

1.定义 字典的内容在花括号 {} 内,键-值(key-value)之间用冒号 : 分隔,键值对之间用逗号 , 分隔,比如创建字典 ,如下所示: d{name:小明,age:18}# 使用 dict 函数:强转 # 方式一&am…

【一文详解】知识分享:(ASP.Net Core基础学习及快速入门)

背景知识 相关术语 .Net .NET是微软的一个开发平台,这个平台的一大特点就是跨语言性,不管是什么语言,c、c、c#、F#、J#、vb等语言都可以用这个平台合作开发; .NET,它是微软创建的一个用于构建多种不同类型的应用程…

书生·浦语大模型实战营-学习笔记2

目录 轻松玩转书生浦语大模型趣味Demo1. 大模型及 InternLM 模型介绍2. InternLM-Chat-7B 智能対话 Demo3. Lagent 智能体工具调用 Demo4. 浦语•灵笔图文创作理解 Demo5. 通用环境配置实验记录6. 课后作业 视频地址: (2)轻松玩转书生浦语大模型趣味Demo 文档教程&a…

C#用string.Replace方法批量替换某一类字符串

目录 一、关于字符串及其操作常识 二、String.Replace 方法 1.重载 2.Replace(Char, Char) 3.Replace(String, String) (1)实例: (2)生成结果: 4.Replace(String, String, StringComparison) 5.…

2023年低代码无代码产业大会:核心内容与学习收获(附大会核心PPT下载)

2023年低代码无代码产业大会聚焦了行业最前沿的趋势与技术,为企业数字化转型提供新的思路和方法。在这次大会上,我们可以深入了解到低代码/无代码技术的最新发展,以及如何利用这些技术来提高业务效率和创新能力。 一、大会的核心内容 1、低代…

net8 golang python性能比较

net8正式版出来两个月,现在性能到底如何呢,做个简单的例子和其他语言比较一下,测试内容是查找1000000以内的质数,代码不多,但包含了循环计算和Math库函数调用,直观的看一下语言之间差距是多少,心…

【AI视野·今日Robot 机器人论文速览 第七十三期】Tue, 9 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Tue, 9 Jan 2024 Totally 40 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers Digital Twin for Autonomous Surface Vessels for Safe Maritime Navigation Authors Daniel Menges, Andreas Von Brandis, A…

JWT---JSON Web Token

JSON Web Token是什么 JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。 JSON Web Token的结构是什么样的 JSON…

【每日一题】构造有效字符串的最少插入数

文章目录 Tag题目来源解题思路方法一:考虑 abc 的个数 写在最后 Tag 【字符串】【2024-01-11】 题目来源 2645. 构造有效字符串的最少插入数 解题思路 方法一:考虑 abc 的个数 思路 如果答案由 t 个 “abc” 组成,那么需要插入字符个数为…

概率论与数理统计-第7章 假设检验

假设检验的基本概念 二、假设检验的基本思想 假设检验的基本思想实质上是带有某种概率性质的反证法,为了检验一个假设H0,是否正确,首先假定该假设H0正确,然后根据抽取到的样本对假设H0作出接受或拒绝的决策,如果样本观察值导致了…

二叉树的创建与遍历

对于前序遍历,首先访问当前节点,然后递归地遍历左子树和右子树。 这就是为什么前序遍历的代码中,首先是 printf("%d ", root->data);。中序遍历: 对于中序遍历,首先递归地遍历左子树,然后访问…

5、C语言:结构

结构 结构的基本知识结构与函数传递结构 结构数组、指向结构的指针自引用结构(二叉树)表查找类型定义(typedef)联合位字段 结构也是一种数据类型。类似于int、char、double、float等。 结构是一个或多个变量的集合,这些…

c++学习笔记-STL案例-机房预约系统1-准备工作

前言 准备工作包括:需求分析、项目创建、主菜单实现、退出功能实现 目录 1 机房预约系统需求 1.1 简单介绍 1.2 身份介绍 1.3 机房介绍 1.4 申请介绍 1.5 系统具体要求 1.6 预约系统-主界面思维导图 2 创建项目 2.1 创建项目 2.2 添加文件 ​编辑 3 创建…

页面跳转后,默认选中tree节点并高亮显示

1.场景 操作步骤: 1.点击数据连接数,打开弹窗 2.点击连接状态跳转到数据连接模块 3.默认选中tree的数据源id节点 2.代码 参数解释: 3.实现逻辑 首先将id通过组件传参的方式传过去,数据连接接收后,在tree里设置…

ubuntu 挂载新硬盘

1、检测新硬盘 新增加硬盘,检测硬盘识别情况。 命令检查:sudo fdisk -l 3、格式化磁盘 格式化:sudo mkfs.ext4 /dev/sdb 其中,/dev/sdb是新分区的设备文件名,ext4是要使用的文件系统类型。 4、挂载新分区 sudo mk…

【银行测试】24年金融银行项目,10道高频测试面试题汇总...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 面试题1&#xff…

使用AUTOSAR来开发汽车基础软件的优点

1、高质量。以前我们采用手写代码的方式,是几个工程师在战斗。现在我们采用平台,BSW代码都是供应商提供的,我们相当于后面还有一个团队陪着我们在战斗。 2、低成本。大家都说采用AUTOSAR平台好贵,但是从长远来看是值得的&#xff…