当前位置: 首页 > news >正文

【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

相关文章:

【Redis】Redis面试热点

Redis 集群有哪些方案? 主从复制:解决了高并发问题 哨兵模式:解决了高并发,高可用问题 分片集群:解决了海量数据存储,高并发写的问题 主从复制 图示: 主从复制:单节点 Redis 并发…...

构建中国人自己的私人GPT-有道GPT

创作不易,请大家多鼓励支持。 在现实生活中,很多人的资料是不愿意公布在互联网上的,但是我们又要使用人工智能的能力帮我们处理文件、做决策、执行命令那怎么办呢?于是我们构建自己或公司的私人GPT变得非常重要。 先看效果 一、…...

data = self._data_queue.get(timeout=timeout)

目录 解决方法 freeze_support 解决方法 opencv 升级 方法3 OMP_NUM_THREADS: 报错: data self._data_queue.get(timeouttimeout) 解决方法 freeze_support data self._data_queue.get(timeouttimeout)RuntimeError: DataLoader worker (pid(s)…...

推挽输出、开漏输出、上拉输入、下拉输入、浮空输入。

一、推挽输出 推挽输出的内部电路大概如上图中黄色部分,输出控制内有反相器,由一个P-MOS和一个N-MOS组合而成,同一时间只有一个管子能够进行导通。 当写入1时,经过反向器后为0,P-MOS导通,N-MOS截至&#xf…...

【Java JVM】栈帧

执行引擎是 Java 虚拟机核心的组成部分之一。 在《Java虚拟机规范》中制定了 Java 虚拟机字节码执行引擎的概念模型, 这个概念模型成为各大发行商的 Java 虚拟机执行引擎的统一外观 (Facade)。 不同的虚拟机的实现中, 通常会有 解释执行 (通过解释器执行)编译执行 (通过即时编…...

【Emgu CV教程】5.4、几何变换之图像翻转

今天讲解的两个函数,可以实现以下样式的翻转。 水平翻转:将图像沿Y轴(图像最左侧垂直边缘)翻转的操作。原始图像中位于左侧的内容将移动到目标图像的右侧,原始图像中位于右侧的内容将移动到目标图像的左侧。垂直翻转:将图像沿X轴…...

2024年AMC8历年真题练一练和答案详解(10),以及全真模拟题

六分成长继续为您分享AMC8历年真题,最后两天通过高质量的真题来体会快速思考、做对题目的策略。 题目从575道在线题库(来自于往年真题)中抽取5道题,每道题目均会标记出自年份和当年度的序号,并附上详细解析。【使用六…...

echarts业务中常用属性设置记录

1.legend计算占比 //在data中定义两个字段 total:0, znum:0 //计算上面两个值 this.data.forEach(val > this.total parseInt(val.value)); for (let i 0; i < nv.length; i) {if (i ! nv.length - 1) {this.znum this.znum Number(parseFloat((nv[i].value / this.t…...

Ubuntu 22.04 安装prometheus

服务器监控和报警软件有很多&#xff0c;为什么我们会选择Prometheus而不是其他软件呢&#xff1f; 因为它有以下优点&#xff1a; 自带简易web监控页面&#xff0c;用户可以很方便地查看监控数据和使用仪表盘。能实时收集数据并根据自定义警报规则推送告警&#xff1b;具有丰…...

Django的模板语言

文章目录 模板语法变量标签过滤器注释 组件引擎模板上下文加载器上下文处理器 模板引擎的支持配置用法引擎内置后端 模板 作为一个网络框架&#xff0c;Django 需要一种方便的方式来动态生成 HTML。最常见的方法是依靠模板。一个模板包含了所需 HTML 输出的静态部分&#xff0…...

为什么安卓逆向手机要root

安卓逆向工程是指对安卓应用程序进行研究和分析&#xff0c;以了解其内部工作原理、提取资源、修改应用行为、发现漏洞等。在某些情况下&#xff0c;为了进行逆向分析&#xff0c;需要对手机进行Root。 以下是一些安卓逆向中可能需要Root的原因&#xff1a; 获得完全访问权限…...

整合junit与热部署

整合junit <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>2.7.0</version></dependency> 测试类上添加SpringBootTest 如&#xff1a; 注意测试类的…...

C++面试宝典第21题:字符串解码

题目 给定一个经过编码的字符串,返回其解码后的字符串。具体的编码规则为:k[encoded_string],表示方括号内部的encoded_string正好重复k次。注意:k保证为正整数;encoded_string只包含大小写字母,不包含空格和数字;方括号确定是匹配的,且可以嵌套。 示例: 编码字符串为…...

WXUI 基于uni-app x开发的高性能混合UI库

uni-app x 是什么&#xff1f; uni-app x&#xff0c;是下一代 uni-app&#xff0c;是一个跨平台应用开发引擎。 uni-app x 没有使用js和webview&#xff0c;它基于 uts 语言。在App端&#xff0c;uts在iOS编译为swift、在Android编译为kotlin&#xff0c;完全达到了原生应用…...

P9840 [ICPC2021 Nanjing R] Oops, It‘s Yesterday Twice More题解

[ICPC2021 Nanjing R] Oops, It’s Yesterday Twice More 传送门 题面翻译 有一张 n n n\times n nn 的网格图&#xff0c;每个格子上都有一只袋鼠。对于一只在 ( i , j ) (i,j) (i,j) 的袋鼠&#xff0c;有下面四个按钮&#xff1a; 按钮 U&#xff1a;如果 i > 1 …...

OceanBase与MySQL兼容性对比

OB针对于高并发和大数据更有优势&#xff0c;公司的dba让我们把数据从mysql迁移到OceanBase了&#xff0c;这里记录一下OceanBase的MySQL模式。 OceanBase的MySQL模式兼容MySQL5.7的绝大部分功能和语法,兼容MySQL5.7版本的全量以及8.0版本的部分JSON函数。 暂不支持的功能: O…...

【linux】visudo

碎碎念 visudo命令是用来修改一个叫做 /etc/sudoers 的文件的&#xff0c;用来设置哪些 用户 和 组 可以使用sudo命令。并且使用visudo而不是使用 vi /etc/sudoers 的原因在于&#xff1a;visudo自带了检查功能&#xff0c;可以判断是否存在语法问题&#xff0c;所以更加安全 …...

Nvidia-docker的基础使用方法

安装&#xff1a; 安装nvidia-docker&#xff1a; distribution$(. /etc/os-release;echo $ID$VERSION_ID)curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.l…...

uniapp一键换色

需求 : 在我们现有项目基础上, 把原来的颜色替换成另一个颜色, 同时需要为下一个项目预留出来随时更换主题色, 实现一键换色 实现 : 1. 介绍 兼容不同项目对主题色及图标的需求 主要通过以下对css颜色和icon主题色图标两个模块的切换 scss/less的css变量config/index.js中的…...

动态规划思想案例刨析

动态规划的思想 动态规划解决问题的核心思想是“重叠子问题”和“最优子结构”。 重叠子问题&#xff1a;在复杂问题中&#xff0c;往往存在许多重复的子问题。动态规划通过避免重复计算&#xff0c;将子问题的解保存起来&#xff0c;以便在需要时直接引用&#xff0c;从而提…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

LangFlow技术架构分析

&#x1f527; LangFlow 的可视化技术栈 前端节点编辑器 底层框架&#xff1a;基于 &#xff08;一个现代化的 React 节点绘图库&#xff09; 功能&#xff1a; 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...