【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.rhkb.cn/news/235904.html

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

相关文章

2023 Gartner® 云数据库管理系统魔力象限发布 PingCAP 入选“荣誉提及”

近日,全球 IT 市场研究和咨询 公司 Gartner 发布最新报告《Magic Quadrant™ for Cloud Database Management Systems》(云数据库管理系统魔力象限), 企业级开源分布式数据库厂商 PingCAP 入选“荣誉提及” 。前不久,P…

STL之list

目录 list定义和结构 list容器模板接受两个参数: list容器的特点 双向性 动态大小 不连续存储 实例 代码输出 需要注意的点 list常用函数 代码示例 list定义和结构 list的使用频率不高,在做题时极少遇到需要使用list的情景。 list是一种双向…

php多小区智慧物业管理系统源码带文字安装教程

多小区智慧物业管理系统源码带文字安装教程 运行环境 服务器宝塔面板 PHP 7.0 Mysql 5.5及以上版本 Linux Centos7以上 统计分析以小区为单位,统计如下数据:小区总栋数、小区总户数、小区总人数、 小区租户数量、小区每月收费金额统计、小区车位统计、小…

小程序系列--4.协同工作和发布

一、小程序成员管理 1. 成员管理的两个方面 2. 不同项目成员对应的权限 3. 开发者的权限说明 4. 添加项目成员和体验成员 二、小程序的版本 1、小程序的版本 三、发布上线 1. 小程序发布上线的整体步骤 一个小程序的发布上线,一般要经过上传代码 -> 提…

Unity中URP下深度图的线性转化

文章目录 前言一、_ZBufferParams参数有两组值二、LinearEyeDepth1、使用2、Unity源码推导:3、使用矩阵推导: 三、Linear01Depth1、使用2、Unity源码推导3、数学推导: 前言 在之前的文章中,我们实现了对深度图的使用。因为&#…

《射雕三部曲》人物关系可视化及问答系统

背景: 该项目旨在构建一个基于图数据库和知识图谱的《射雕三部曲》人物关系可视化及问答系统。通过分析小说中的人物关系,将其构建成图数据库,并结合问答系统和数据分析技术,提供用户可视化的人物关系展示和相关问题的回答。 介绍…

zookeeper下载安装部署

zookeeper是一个为分布式应用提供一致性服务的软件,它是开源的Hadoop项目的一个子项目,并根据google发表的一篇论文来实现的。zookeeper为分布式系统提供了高效且易于使用的协同服务,它可以为分布式应用提供相当多的服务,诸如统一…

docker部署mongo过程

1、拉取MongoDB镜像,这里拉取最新版本。 docker pull mongo2、运行容器 docker run -d --name mongo -p 27017:27017 \ -e MONGO_INITDB_ROOT_USERNAMEadmin \ -e MONGO_INITDB_ROOT_PASSWORD123456 \ mongo:latest --auth#由于 mongodb 默认情况下,…

寒假前端第一次作业

1、用户注册&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用户注册</title> …

Flink异步IO

本文讲解 Flink 用于访问外部数据存储的异步 I/O API。对于不熟悉异步或者事件驱动编程的用户,建议先储备一些关于 Future 和事件驱动编程的知识。 本文代码gitee地址: https://gitee.com/ddxygq/BigDataTechnical/blob/main/Flink/src/main/java/operator/AsyncIODemo.java …

Java面试——框架篇

1、Spring框架中的单例bean是线程安全的吗&#xff1f; 所谓单例就是所有的请求都用一个对象来处理&#xff0c;而多例则指每个请求用一个新的对象来处理。 结论&#xff1a;线程不安全。 Spring框架中有一个Scope注解&#xff0c;默认的值就是singleton&#xff0c;单例的。一…

性能优化-OpenMP概述(一)-宏观全面理解OpenMP

本文旨在从宏观角度来介绍OpenMP的原理、编程模型、以及在各个领域的应用、使用、希望读者能够从本文整体上了解OpenMP。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础…

多语言历史报纸广告事件抽取(ACL2023)

1、写作动机&#xff1a; 首先&#xff0c;获取大规模的、有注释的历史数据集是困难的&#xff0c;因为只有领域专家才能可靠地为它们打标签。其次&#xff0c;大多数现成的NLP模型是在现代语言文本上训练的&#xff0c;这使得它们在应用于历史语料库时效果显著降低。这对于研…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例3-4 CSS 立方体

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>CSS 立方体</title> <link href"CSS/style.css" rel"stylesheet" type"text/css"> <style> .box {width: 200px…

【Docker】快速入门之Docker的安装及使用

一、引言 1、什么是Docker Docker是一个开源的应用容器引擎&#xff0c;它让开发者可以将他们的应用及其依赖打包到一个可移植的镜像中&#xff0c;然后发布到任何流行的Linux或Windows操作系统的机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之…

滚柱导轨精度等级是如何划分?

滚柱导轨的精度等级主要根据其表面精度、滑块与导轨表面的公差以及定位精度等性能指标来划分。根据不同的标准和应用需求&#xff0c;精度等级的划分存在一定的差异。 1、行走平行度&#xff1a;普通级&#xff08;无标注/C&#xff09;5μm&#xff0c;高级&#xff08;H&…

vue/vue3/js来动态修改我们的界面浏览器上面的文字和图标

前言&#xff1a; 整理vue/vue3项目中修改界面浏览器上面的文字和图标的方法。 效果&#xff1a; vue2/vue3: 默认修改 public/index.html index.html <!DOCTYPE html> <html lang"en"><head><link rel"icon" type"image/sv…

超维空间M1无人机使用说明书——41、ROS无人机使用yolo进行物体识别

引言&#xff1a;用于M1无人机使用的18.04系统&#xff0c;采用的opencv3.4.5版本&#xff0c;因此M1无人机只提供了基于yolov3和yolov4版本的darknet_ros功能包进行物体识别&#xff0c;识别效果足够满足日常的物体识别使用&#xff0c;如果需要更高版本的yolov7或者yolov8&am…

python tcp socket中实现SSL/TLS认证

SSL/TLS介绍 官话说SSL是安全套接层(secure sockets layer)&#xff0c;TLS是SSL的继任者&#xff0c;叫传输层安全(transport layer security)。 说白点&#xff0c;就是在明文的上层和TCP层之间加上一层加密&#xff0c;这样就保证上层信息传输的安全。如HTTP协议是明文传输…

大模型LLM Agent在 Text2SQL 应用上的实践

1.前言 在上篇文章中「如何通过Prompt优化Text2SQL的效果」介绍了基于Prompt Engineering来优化Text2SQL效果的实践&#xff0c;除此之外我们还可以使用Agent来优化大模型应用的效果。 本文将从以下4个方面探讨通过AI Agent来优化LLM的Text2SQL转换效果。 1 Agent概述2 Lang…