整理好了!2024年最常见 20 道 Redis面试题(四)

上一篇地址:整理好了!2024年最常见 20 道 Redis面试题(三)-CSDN博客

七、Redis 单线程模型是如何工作的?

Redis 是一个基于单线程模型的高性能键值存储数据库。尽管 Redis 操作大多数是单线程执行的,但它依然能够提供极高的性能,这主要得益于以下几个方面:

  1. 单线程模型

    • Redis 的所有操作都是在一个主线程中顺序执行的,这意味着在任何给定时刻,只有一个操作在处理,减少了多线程编程中的锁和同步开销。
  2. 事件驱动

    • Redis 使用事件驱动模型来处理客户端的请求和服务器的响应。这种模型允许 Redis 以非阻塞的方式处理多个客户端连接和请求。
  3. I/O 多路复用

    • Redis 利用了 I/O 多路复用技术,如 epoll(在 Linux 上)或 kqueue(在 BSD 系统上),这使得 Redis 能够同时监视多个套接字,以确定哪些套接字已经准备好进行读写操作。
    • 当一个套接字准备好进行操作时,Redis 会将该操作加入到事件循环中,由主线程顺序执行。
  4. 高效的数据结构

    • Redis 使用了高效的数据结构来存储键值对,如哈希表、跳表、压缩列表等,这些数据结构能够提供快速的查找、插入和删除操作。
  5. 内存管理

    • Redis 拥有精细的内存管理策略,包括内存分配、回收、碎片管理等,这有助于提高内存的使用效率。
  6. 无锁编程

    • 由于 Redis 是单线程的,它避免了多线程编程中常见的锁竞争和死锁问题,从而简化了编程模型并提高了性能。
  7. 原子操作

    • Redis 的操作是原子性的,这意味着每个操作要么完全执行,要么完全不执行,这有助于保证数据的一致性。
  8. 命令的优化

    • Redis 的命令执行是高度优化的,许多命令都是直接在内存中执行,无需进行磁盘 I/O 操作。
  9. 持久化操作的异步性

    • 虽然 Redis 是内存数据库,但它提供了持久化机制,如 RDB 快照和 AOF 日志。这些持久化操作通常是由子进程或后台线程异步执行的,不会阻塞主线程。
  10. 网络模型

    • Redis 使用自己的网络模型来处理客户端连接和请求,这使得它能够有效地管理大量并发连接。
  11. Pipelining

    • 客户端可以发送多个命令到 Redis,而不需要等待每个命令的响应,这种技术称为 Pipelining,可以显著提高客户端和服务器之间的通信效率。
  12. Lua 脚本

    • Redis 支持 Lua 脚本,允许用户在服务器端执行 Lua 脚本来执行复杂的操作,这些操作也是单线程执行的。

尽管 Redis 是单线程的,但通过上述机制,它能够提供非常高的性能和可伸缩性。然而,单线程模型也意味着 Redis 的性能受限于单个 CPU 核心的处理能力。对于需要高并发写入操作的应用,Redis 可能不是最佳选择,但对于读多写少的场景,Redis 可以提供非常出色的性能。

八、Redis 的主从复制是如何工作的?

Redis 的主从复制是一种高可用性解决方案,它允许多个 Redis 服务器(称为从服务器或副本)复制主服务器(称为主服务器或领导者)的数据。以下是 Redis 主从复制工作的详细过程:

  1. 复制的初始化

    • 主从复制开始于从服务器向主服务器发送 SLAVEOF 命令,指定主服务器的地址和端口。
    • 从服务器随后建立与主服务器的连接,并发送 PSYNC 命令请求数据同步。
  2. 数据同步

    • 如果从服务器是第一次复制,或者无法提供有效的复制偏移量,主服务器会执行一个 RDB 快照,并将整个数据库的数据发送给从服务器。
    • 如果从服务器已经复制过部分数据,PSYNC 命令会尝试进行部分重同步(如果主服务器支持的话)。这可以减少所需的数据传输量。
  3. RDB 快照传输

    • 主服务器生成 RDB 快照,并将该快照文件发送给从服务器。
    • 从服务器接收 RDB 文件,并将其加载到内存中,从而复制主服务器的数据。
  4. 命令传播

    • 在 RDB 快照同步完成后,主服务器继续将所有写操作命令发送给从服务器。
    • 从服务器接收这些命令,并在本地执行,以保持数据的一致性。
  5. 复制偏移量

    • 从服务器会记录它已经接收和执行的命令的数量,这个偏移量存储在从服务器的复制偏移量中。
    • 如果从服务器断开连接并重新连接,它会使用这个偏移量来请求从主服务器同步丢失的数据。
  6. 断线重连

    • 如果从服务器与主服务器之间的连接断开,从服务器会尝试自动重新连接。
    • 重连后,从服务器会发送 PSYNC 命令,尝试进行部分重同步,如果可能的话。
  7. 主服务器的故障转移

    • 在某些配置中,如果主服务器宕机,从服务器可以被提升为新的主服务器,这个过程称为故障转移或故障切换。
    • 这通常需要手动干预或使用自动化工具,如 Redis Sentinel 或 Redis Cluster。
  8. 读写分离

    • 在主从复制架构中,通常所有的写操作都在主服务器上执行,而读操作可以在从服务器上执行,以提高性能和可伸缩性。
  9. 配置和优化

    • 复制的配置和优化包括设置合适的 repl-ping-slave-period 和 repl-timeout 参数,以优化复制的稳定性和性能。
    • 还可以配置从服务器的 slave-read-only 参数,确保从服务器不接受写操作。
  10. 监控和日志

    • Redis 提供了多种监控复制状态的命令,如 INFO replication,以及日志记录功能,帮助管理员监控和诊断复制问题。

通过主从复制,Redis 可以提供数据的高可用性和读写分离,从而提高应用程序的性能和可靠性。然而,主从复制也带来了一些复杂性,如数据同步延迟、故障转移和数据一致性问题,需要在实际部署中仔细考虑和管理。

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

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

相关文章

SpringBoot中使用AOP实现日志记录功能

目录 一、SpringBoot框架介绍 二、什么是 AOP 三、日志记录的必要性 四、SpringBoot中如何使用AOP实现日志记录功能 一、SpringBoot框架介绍 SpringBoot是一个开源的Java开发框架,旨在简化基于Spring框架的应用程序的开发。它提供了一套开箱即用的工具&#xf…

express.js--连接数据库,并且增删改查(四)

使用数据库需要在电脑安装mysql,然后使用navicat 我没有下载mysql,我使用的是小皮里面的数据库,需要破解版的navicat可以私信我 安装mysql npm i mysql 数据库的基本信息,我是直接写到配置文件里面的 config/index.js module.exports {…

【Android】联系人列表补充

真布局--叠起来垂直管 效果展示 部分代码&#xff08;在activity_main&#xff09;里面 <FrameLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"…

如何在Windows下使用Docker Desktop运行CentOS容器

引言&#xff1a; 在Windows操作系统中&#xff0c;我们可以使用Docker Desktop来轻松运行和管理各种Linux容器&#xff0c;包括CentOS。今天&#xff0c;我们就来详细讲解一下如何在Windows环境下使用Docker Desktop来运行CentOS容器。 一、安装Docker Desktop 首先&#x…

WPF中CommandParameter用法

1. 界面样式 2. XAML中代码部分 <ButtonGrid.Row"0"Grid.Column"1"Command"{Binding BtnClick_Number}"CommandParameter"7"Content"7"Style"{StaticResource BtnStyle_Num}" /> <ButtonGrid.Row"…

基于Redisson实现延时队列

1.在application.yaml中配置延时队列信息 #延时队列 redis-delay-queue:enabled: truename: delay_queue_demo 2.定义延时队列 /** * 延时队列 */ public class RedisDelayedQueue {private static Logger logger LoggerFactory.getLogger(RedisDelayedQueue.class);Resour…

STM32中SPI的使用

SPI&#xff08;Serial Peripheral Interface&#xff09;是一种高速、全双工、同步的通信协议&#xff0c;它广泛应用于微控制器与外设或其他微控制器之间的通信。SPI通过至少四条线路进行通信&#xff1a;一条串行时钟&#xff08;SCLK&#xff09;、一条主设备输出/从设备输…

【MySQL精通之路】MySQL的使用(2)-配置

目录 1.配置方式 2.配置优先级 3.配置教程 3.1.使用命令行上的配置 3.2.使用配置文件 3.2.1 配置文件处理顺序 3.2.1.1 Windows配置 3.2.1.2 Unix和类Unix系统配置 3.2.2 配置文件语法 3.2.3 指定配置文件 3.3.影响配置文件处理的命令行选项 3.4.配置选项修改器 3…

uniapp连接蓝牙获取设备心电图,并通过canvas进行绘画

话不多说直接上代码&#xff0c;我这里没有蓝牙协议&#xff0c;直接询问蓝牙硬件工程师的解码方式。并且也涉及到一个大小端的问题&#xff0c;我这里是项目需要。 <template><view><page-head :title"title"></page-head><!-- 心电图显…

【运维项目经历|011】:智能DNS解析优化项目

目录 项目名称 项目背景 项目目标 项目成果 我的角色与职责 我主要完成的工作内容 本次项目涉及的技术 本次项目遇到的问题与解决方法 本次项目中可能被面试官问到的技术性问题 问题1&#xff1a;DNS服务的端口是多少&#xff1f; 问题2&#xff1a;什么是顶级域&…

【个人商业画布】你有思考过把自己当成一家公司来经营吗?

商业模式画布(Business Model Canvas)&#xff0c;是亚历山大奥斯特瓦德在《商业模式新生代》中提出的一种用于描述商业模式、可视化商业模式、评估商业模式以及改变商业模式的通用语言。它由9个模块构成&#xff0c;帮助创业者理清为“细分客户提供独有价值”&#xff0c;从而…

浅谈OpenHarmony LiteOS-A内核之基础硬件——中断控制器GIC400

一、前言 OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;采用多内核架构&#xff0c;支持Linux内核的标准系统、LiteOS-A的小型系统、LiteOS-M的轻量系统。 其中LiteOS-A要求设备具备一定的处理能力&#xff0c;对比LiteOS-M&#xff0c;LiteOS-A支持…

国赛部分复现

MISC 神秘文件 下载解压后是个pptm文件&#xff0c;内容丰富 使用010打开ppt查看 发现为PK开头&#xff0c;属于压缩包文件。复制粘贴ppt&#xff0c;修改副本后缀为.zip并解压 part1 查看属性&#xff0c;发现奇怪字符 QFCfpPQ6ZymuM3gq 根据提示Bifid chipher&#xff0c;…

cuda 是什么

CUDA 是什么&#xff1f; CUDA&#xff08;Compute Unified Device Architecture&#xff0c;统一设备架构&#xff09;是一种并行计算平台和编程模型&#xff0c;旨在利用GPU&#xff08;图形处理器&#xff09;进行高性能计算。它是由NVIDIA公司开发和推广的&#xff0c;主要…

【Linux】Linux信号产生,接受与处理机制

理解Linux信号产生&#xff0c;接受与处理机制 信号是Linux操作系统中一种用于进程间通信和异步事件处理的机制。在本文中&#xff0c;我们将结合Linux的源码&#xff0c;深入分析信号的产生、发送、接收和处理的底层原理。 文章目录 理解Linux信号产生&#xff0c;接受与处理…

Android 几个简单的自定义对话框介绍

Android 几个简单的自定义对话框介绍 文章目录 一、前言二、对话框相关内容1、效果2、对话框显示的调用代码&#xff08;1&#xff09;原生对话框代码&#xff1a;&#xff08;2&#xff09;自定义对话框代码&#xff1a; 3、对话框SweetAlertDialog 主要实现代码&#xff1a;4…

【Linux】-Elasticsearch安装部署[16]

目录 简介 安装 1、添加yum仓库 2、安装es 3、配置es 4、启动es 5、关闭防火墙 6、测试 简介 全文搜索属于最常见的要求&#xff0c;开源的Elasticsearch&#xff08;以下简称es&#xff09;是目前全文搜索引擎的首选。它可以快速的储存、搜索和分析海量数据。维基百科…

以人为本的人工智能:李飞飞谈AI

随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;关于AI的讨论越来越多&#xff0c;特别是围绕其可能带来的威胁。有人担心高效的AI会夺走我们的工作&#xff0c;甚至不可控的AI最终会统治人类。对此&#xff0c;斯坦福大学计算机科学系教授李飞飞提出了不同…

Paddle 稀疏计算 使用指南

Paddle 稀疏计算 使用指南 1. 稀疏格式介绍 1.1 稀疏格式介绍 稀疏矩阵是一种特殊的矩阵&#xff0c;其中绝大多数元素为0。与密集矩阵相比&#xff0c;稀疏矩阵可以节省大量存储空间&#xff0c;并提高计算效率。 例如&#xff0c;一个5x5的矩阵中只有3个非零元素: impor…

springboot中使用spring-cloud-starter-openfeign遇到的问题及解决参考

声明&#xff1a;本文使用的spring boot 版本是2.7.12 在springboot中使用spring-cloud-starter-openfeign遇到的一些问题&#xff1a; Caused by: java.lang.ClassNotFoundException: org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata java.…