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

redis核心面试题一(架构原理+RDB+AOF)

文章目录

  • 0. redis与mysql区别
  • 1. redis是单线程架构还是多线程架构
  • 2. redis单线程为什么这么快
  • 3. redis过期key删除策略
  • 4. redis主从复制架构原理
  • 5. redis哨兵模式架构原理
  • 6. redis高可用集群架构原理
  • 7. redis持久化之RDB
  • 8. redis持久化之AOF
  • 9. redis持久化之混合持久化

0. redis与mysql区别

1.数据库类型MySQL是关系型数据库Redis是缓存数据库(非关系型数据库)
2.数据存放位置MySQL:数据存放在磁盘中Redis:数据存放在内存中
3.支持数据类型MySQL:数值、日期/时间、字符串Redis:String、Hash、List、Set、Zset

1. redis是单线程架构还是多线程架构

redis6.0版本之前是单线程,这里的单线程指的是网络IO和键值对读写命令是由一个线程完成的
redis6.0版本之前之后是多线程,这里的多线程指的是在网络IO请求过程中采用了多线程,但是键值对读写命令仍然是单线程的,并且持久化、集群数据同步、异步删除都是由额外的线程完成的。

所以redis仍然是线程安全的

2. redis单线程为什么这么快

  1. 命令执行基于内存操作,单条命令操作时间是几十纳秒

  2. 命令执行是单线程操作,避免了多线程上下文切换开销

  3. 高效的数据结构,包括全局Hash表、简单动态字符串、双向链表、跳跃表、整数数组

  4. 基于IO多路复用技术,能够保证大量并发下的效率,提高系统的吞吐量

在这里插入图片描述

3. redis过期key删除策略

1.惰性删除:	key达到过期时间,不会被立即删除,只有当读写到这个已经过期的key时,才会触发惰性删除策略删除该key2.定时删除:	由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期(默认每100ms)主动淘汰一批已过期的key,这里的一批只是部分过期key,所以可能会出现部分key已经过期但仍然还没有被清理掉的情况3.主动删除:	当redis已用内存超过maxmemory限定时,触发主动清理策略,共8种内存淘汰策略
a)针对设置了过期时间的key1. volatile-ttl:	在设置了过期时间的键值对,根据过期时间的先后进行删除,越早过期的越先被删除。2. volatile-random:	在设置了过期时间的键值对,进行随机删除。3. volatile-lru:	会使用LRU算法筛选设置了过期时间的键值对删除。4. volatile-lfu:	会使用LFU算法筛选设置了过期时间的键值对删除。b)针对所有的key5. allkeys-random:	从所有键值对中随机选择并删除数据。6. allkeys-lru:		使用LRU算法在所有数据中进行筛选删除。7. allkys-lfu:		使用LFU算法在所有数据中进行筛选删除。c)不处理8. noeviction:不会剔除任何数据,拒绝所有写入操作并返回客户端错误信息,此时Redis只响应读操作。LRU算法(Least Recently Used,最近最久未使用):		 淘汰很久没被访问过的数据,以最近-次访问时间作为参考
LFU算法(Least Frequently Used,最不经常使用):		淘汰最近一段时间被访问次数最少的数据,以次数作为参考
绝大多数情况我们都可以用LRU策略,当存在大量的热点缓存数据时,LFU可能更好点

4. redis主从复制架构原理

常见的主从复制架构:总体来说,主数据库Master以写为主,从数据库Slave以读为主,整体负责读写分离、容灾恢复。

case1:一主二仆【中心化架构】 slaveof 新主库IP 新主库端口

case2:薪火相传【去中心化架构】 slaveof 新主库IP 新主库端口

case3:反客为主 slaveof no one

// 主从数据库数据同步过程
1.全量复制:【当主从服务器刚建立连接的时候,进行全量数据同步】a、首先从服务器连接到主服务器,发送psync命令进行数据全量同步(Redis2.8之前是sync命令)b、主服务器收到psync命令之后,执行bgsave命令生成RDB快照文件发送给从服务器c、从服务器收到RDB快照文件后,清空内存旧数据,将接收到的数据写入磁盘2、增量复制:【全量复制结束后,进行增量复制】a、主服务器每执行一个写命令就会向从服务器发送相同的写命令b、从服务器接收并执行收到的写命令。优点:(1)数据热备份:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。(2)故障恢复:	如果master宕掉了,哨兵模式可以提升一个新的master,实现故障转移,达到高可用。(3)负载均衡:	可以轻易实现横向扩展,实现读写分离,一个master用于写,多个slave 用于分摊读的压力缺点:(1)网络延迟:由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave服务器有一定的延迟(2)如果master宕掉了,普通主从模式无法自动切换master,必须使用哨兵模式

5. redis哨兵模式架构原理

优点:可以动态切换主从库,中心型公司首选

缺点:

  1. 单个master主节点提供写服务,redis存储的数据有限(<10G),并发量不足(<3w)
  2. 自动切换主从库会产生访问瞬断的情况,切换没有那么快

在这里插入图片描述

工作原理:

	哨兵是一个分布式系统,可以在一个架构中运行多个哨兵进程,这些进程使用流言协议(gossip protocols)来传播Master是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移以及选择哪个Slave作为新的Master。哨兵模式的简单工作原理如下:
(1)监控:哨兵会不断地检查你的MasterSlave是否运作正常。
(2)提醒:当被监控的某个Redis节点出现问题时,哨兵可以通过 API 向管理员或者其他应用程序发送通知。
(3)自动故障迁移:当Master不能正常工作时,哨兵会进行自动故障迁移操作,将其中一个Slave升级为新的Master  

6. redis高可用集群架构原理

  1. redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片存储特性

  2. redis集群将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展,可线性扩展到上万个节点(官方推荐不超过1000个节点)

  3. redis集群的性能和高可用性均优于之前版本的哨兵模式,且集群配置非常简单。

    大型公司首选

在这里插入图片描述

7. redis持久化之RDB

RDB(Redis DataBase)在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时将快照文件 (dump.rdb) 移动到redis安装目录并启动服务即可。

save 3600 1		# 15分钟变动1次
save 300 100	# 5分钟变动100次
save 60 10000	# 1分钟变动1w次save				save时只管保存,其它不管,全部阻塞。
bgsave			Redis会在后台异步进行快照操作, 快照同时还可以响应客户端请求。

在这里插入图片描述

RDB优点:1、持久化速度快:RDB在保存RDB文件时父进程唯一需要做的就是fork出一个子进程,接下来的工作全部由子进程来做,父进程不需要再做其他I0操作,所以RDB持久化方式可以最大化redis的性能。[适合大规模的数据持久化]2、恢复速度快:与AOF相比,RDB是一个非常紧凑的文件,RDB数据恢复会更快一些RDB缺点:1、内存膨胀:Fork的作用是复制一个与当前进程一样的进程,新进程的所有数据(变量、环境变量、程序计数器等)数值都和原进程一致,大致2倍的膨胀性需要考虑。2、数据丢失:在一定间隔时间做一次备份,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改

8. redis持久化之AOF

AOF(Append Only File)是以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis 重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

AOF配置【APPEND ONLY MODE】
appendonly no  										# 默认no
appendfilename "appendonly.aof" 	# 文件名
appendfsync [always/everysec/no]always		同步持久化,redis每次发生数据改变都会被立即记录到磁盘,性能较差但数据完整性最好everysec		默认推荐,异步操作,每秒记录一次,最多损失1s的数据no			不进行持久化
no-appendfsync-on-rewrite no 				# 重写时是否运用appendfsync,默认no即可,保证数据安全性
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
AOF优点:每修改同步:appendfsync always 同步持久化 每次发生数据变更会被立即记录到磁盘,性能较差但数据完整性比较好每秒同步:appendfsync everysec 异步操作,每秒记录 如果一秒内宕机,有数据丢失不同步:appendfsync no 从不同步AOF缺点:1、文件大、恢复慢:相同数据集的数据而言aof文件要远大于rdb文件,恢复速度慢于rdb2Aof运行效率要慢于rdb,每秒同步策略效率较好,不同步效率和rdb相同

在这里插入图片描述

redis默认使用AOF恢复数据,因为aof保存的数据更全面

9. redis持久化之混合持久化

背景:

  1. 重启Redis时,我们很少只使用RDB来恢复内存数据,因为这会丢失大量数据
  2. 通常使用AOF日志重放来恢复数据,但是重放AOF日志性能相对RDB来说要慢很多,当Redis数据很大,启动需要花费很长的时间
    Redis 4.0为了解决这个问题,带来了一个新的持久化选项一混合持久化
实现步骤:
步骤一:通过如下配置可以开启混合持久化(必须先开启aof):aof-use-rdb-preamble yes步骤二:此时AOF在重写时,不再是单纯将内存数据转换为RESP命令写入AOF文件,而是将重写这一刻之前的内存做RDB
快照处理,并且将RDB快照内容和增量的AOF修改内存数据的命令存在一起,都写入新的AOF文件步骤三:新的文件一开始不叫appendonly.aof,等到重写完新的AOF文件才会进行改名,覆盖原有的AOF文件,完成新旧两个AOF文件的替换。步骤四:redis重启的时候,可以先加载RDB的内容,然后再重放增量AOF日志就可以完全替代之前的AOF全量文件重放,因此重启效率大幅得到提升。

在这里插入图片描述

相关文章:

redis核心面试题一(架构原理+RDB+AOF)

文章目录 0. redis与mysql区别1. redis是单线程架构还是多线程架构2. redis单线程为什么这么快3. redis过期key删除策略4. redis主从复制架构原理5. redis哨兵模式架构原理6. redis高可用集群架构原理7. redis持久化之RDB8. redis持久化之AOF9. redis持久化之混合持久化 0. red…...

STM32F1之SPI通信·软件SPI代码编写

目录 1. 简介 2. 硬件电路 移位示意图 3. SPI时序基本单元 3.1 起始条件 3.2 终止条件 3.3 交换一个字节&#xff08;模式0&#xff09; 3.4 交换一个字节&#xff08;模式1&#xff09; 3.5 交换一个字节&#xff08;模式2&#xff09; 3.6 交换一个字节&a…...

实战:生成个性化词云的Python实践【7个案例】

文本挖掘与可视化&#xff1a;生成个性化词云的Python实践【7个案例】 词云&#xff08;Word Cloud&#xff09;&#xff0c;又称为文字云或标签云&#xff0c;是一种用于文本数据可视化的技术&#xff0c;通过不同大小、颜色和字体展示文本中单词的出现频率或重要性。在词云中…...

云存储与云计算详解

1. 云存储与云计算概述 1.1 云存储 云存储&#xff08;Cloud Storage&#xff09;是指通过互联网将数据存储在远程服务器上&#xff0c;用户可以随时随地访问和管理这些数据。云存储的优点包括高可扩展性、灵活性和成本效益。 1.2 云计算 云计算&#xff08;Cloud Computin…...

【飞舞的花瓣】飞舞的花瓣代码||樱花代码||表白代码(完整代码)

关注微信公众号「ClassmateJie」有完整代码以及更多惊喜等待你的发现。 简介/效果展示 这段代码是一个HTML页面&#xff0c;其中包含一个canvas元素和相关的JavaScript代码。这个页面创建了一个飘落花瓣的动画效果。 代码【获取完整代码关注微信公众号「ClassmateJie」回复“…...

网络安全的重要组成部分:数据库审计

数据库审计&#xff08;简称DBAudit&#xff09;以安全事件为中心&#xff0c;以全面审计和精确审计为基础&#xff0c;实时记录网络上的数据库活动&#xff0c;对数据库操作进行细粒度审计的合规性管理&#xff0c;对数据库遭受到的风险行为进行实时告警。它通过对用户访问数据…...

gc和gccgo编译器

Go 语言有两个主要的编译器&#xff0c;分别是 Go 编译器&#xff08;通常简称为 gc&#xff09;和 GCCGO。它们之间有一些重要的异同点&#xff1a; gc 编译器&#xff1a; gc 是 Go 语言的官方编译器&#xff0c;由 Go 语言的开发团队维护。它是 Go 语言最常用的编译器&#…...

开放重定向漏洞

开放重定向漏洞 1.开放重定向漏洞概述2.攻击场景&#xff1a;开放重定向上传 svg 文件3.常见的注入参数 1.开放重定向漏洞概述 开放重定向漏洞&#xff08;Open Redirect&#xff09;是指Web应用程序接受用户提供的输入&#xff08;通常是URL参数&#xff09;&#xff0c;并将…...

基于YoloV4汽车多目标跟踪计数

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 随着城市交通的快速发展&#xff0c;交通流量和车辆密度的不断增加&#xff0c;对交通管理和控…...

交叉编译程序,提示 incomplete type “struct sigaction“ is not allowed

问题描述 incomplete type "struct sigaction" is not allowed解决办法 在代码的最顶端添加如下代码即可 #define _XOPEN_SOURCE此定义不是简单的宏定义&#xff0c;是使程序符合系统环境的不可缺少的部分 _XOPEN_SOURCE为了实现XPG&#xff1a;The X/Open Porta…...

叶面积指数(LAI)数据、NPP数据、GPP数据、植被覆盖度数据获取

引言 多种卫星遥感数据反演叶面积指数&#xff08;LAI&#xff09;产品是地理遥感生态网推出的生态环境类数据产品之一。产品包括2000-2009年逐8天数据&#xff0c;值域是-100-689之间&#xff0c;数据类型为32bit整型。该产品经过遥感数据获取、计算归一化植被指数、解译植被类…...

光环P3O不错的一个讲座

光环P3O不错的一个讲座&#xff0c;地址&#xff1a;https://apphfuydjku5721.h5.xiaoeknow.com/v2/course/alive/l_663dc840e4b0694c62c32d1d?app_idapphfuydJkU5721&share_fromu_5c987304d8515_wH2E5HgCgx&share_type5&share_user_idu_5c987304d8515_wH2E5HgCgx…...

Typescnipt 学习笔记

TypeScript 学习笔记 一、什么是 TypeScript TypeScript 是一种由微软开发的开源编程语言&#xff0c;它是 JavaScript 的一个超集。它添加了静态类型和面向对象的特性&#xff0c;并提供了更强大的工具和功能&#xff0c;以增强 JavaScript 的开发体验。 二、为什么要学习 …...

如何在 Ubuntu 24.04 (桌面版) 上配置静态IP地址 ?

如果你想在你的 Ubuntu 24.04 桌面有一个持久的 IP 地址&#xff0c;那么你必须配置一个静态 IP 地址。当我们安装 Ubuntu 时&#xff0c;默认情况下 DHCP 是启用的&#xff0c;如果网络上可用&#xff0c;它会尝试从 DHCP 服务器获取 IP 地址。 在本文中&#xff0c;我们将向…...

小恐龙跳一跳源码

小恐龙跳一跳源码是前两年就火爆过一次的小游戏源码&#xff0c;不知怎么了今年有火爆了&#xff0c;所以今天就吧这个源码分享出来了&#xff01;有喜欢的直接下载就行&#xff0c;可以本地单机直接点击index.html进行运行&#xff0c;又或者放在虚拟机或者服务器上与朋友进行…...

快手二面准备【面试准备】

快手二面准备【面试准备】 前言版权快手二面准备秋招一面中的问题实习一面中的问题计算机网络和操作系统论坛项目登录注册ThreadLocal代替session存储用户秒杀项目登录注册->阿里验证码->rpcsession为什么改为token实现&#xff0c;redis存储用户信息由binlog的用法->…...

贪心算法2(c++)

最大子矩阵 描述 已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵&#xff0c;你的任务是找到最大的非空(大小至少是1*1)子矩阵。 比如&#xff0c;如下4*4的矩阵 0- 2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0-2 的最大子矩阵是 9 2 -4 1 -18 这个子矩阵的大小是15。 输入…...

Bugku Crypto 部分题目简单题解(四)

目录 python_jail 简单的rsa 托马斯.杰斐逊 这不是md5 进制转换 affine Crack it rsa python_jail 启动场景 使用虚拟机nc进行连接 输入print(flag) 发现报错&#xff0c;经过测试只能传入10个字符多了就会报错 利用python中help()函数&#xff0c;借报错信息带出flag变…...

软考备考三

操作系统 操作系统概述 功能&#xff1a;组织和管理软件&#xff0c;硬件资源以及计算机系统中的工作流程&#xff0c;控制程序的执行&#xff0c;向用户提供接口。 分类&#xff1a; 1.批处理操作系统 单道批 多道批&#xff08;宏观上并行&#xff0c;微观上串行&#xff09…...

Fortran: select type

Fortran: select type 实现类似C的template函数功能 module M_reduceuse mpi_f08interface reducemodule procedure reduce_scalar,reduce_arrayend interface reducecontains!!https://docs.open-mpi.org/en/v5.0.x/man-openmpi/man3/MPI_Reduce.3.htmlsubroutine reduce_ar…...

UE4动画蓝图实战:用双骨骼IK节点搞定手部穿模,附完整蓝图节点截图

UE4动画蓝图实战&#xff1a;双骨骼IK节点解决手部穿模的完整指南在角色动画开发中&#xff0c;手部穿模问题堪称"视觉杀手"。想象一下精心设计的角色挥拳时&#xff0c;拳头直接穿过墙壁或敌人身体——这种违和感足以毁掉整个场景的沉浸感。本文将彻底解决这个痛点&…...

AI圈内火热的Agent、MCP、Skill、CLI是啥?用装修房子讲透,看完秒懂

本文用装修房子的比喻&#xff0c;详细解释了AI领域的四个核心概念&#xff1a;Agent如同会自主规划任务的私人助理&#xff1b;MCP是AI与外部工具数据的统一接口&#xff0c;类似USB-C&#xff1b;Skill是指导AI按标准操作执行的手册&#xff1b;CLI则是不依赖图形界面的命令行…...

通过Taotoken实现Hermes Agent自定义模型供应商接入

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过Taotoken实现Hermes Agent自定义模型供应商接入 Hermes Agent是一个流行的AI智能体开发框架&#xff0c;它支持通过配置自定义…...

别再瞎拖拽了!Unity Prefab从创建到批量修改的保姆级工作流(含变体与嵌套实战)

Unity Prefab高效工作流&#xff1a;从创建到批量修改的实战指南在Unity项目开发中&#xff0c;Prefab&#xff08;预制体&#xff09;是最基础也最强大的工具之一。但很多开发者&#xff0c;尤其是初学者&#xff0c;往往停留在简单的"拖拽-修改"阶段&#xff0c;没…...

【C++】零基础入门 · 第 6 节:数组

上一节我们学习了函数,知道了如何把代码封装起来方便复用。但在实际编程中,你很快就会遇到一个问题:如果要存储 100 个学生的成绩,难道要定义 100 个变量吗?这显然不现实。数组就是 C++ 给出的答案——它让我们能用一个变量名管理一组相同类型的数据。 1. 为什么需要数组…...

YOLOv8道路交通信号标志识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+环境配置)

摘要 道路交通信号标志的自动检测是智能驾驶与交通管理系统中的核心环节。本文基于YOLOv8目标检测算法&#xff0c;构建了一个涵盖21类常见交通信号标志的检测系统&#xff0c;包括禁令标志、指示标志、警告标志及信号灯等。模型在包含1376张训练图像、488张验证图像和229张测…...

基于ISDN信令的来电语音播报系统:从原理到树莓派实现

1. 项目概述&#xff1a;一个基于ISDN的来电语音播报系统如果你家里或办公室里还有一台老式的ISDN路由器&#xff0c;别急着把它当电子垃圾处理掉。我最近就利用手头一台闲置的ISDN路由器&#xff0c;折腾出了一个挺有意思的小玩意儿&#xff1a;一个能自动识别来电号码&#x…...

绝了!原来毕业论文还能这样写?2026降AIGC工具推荐合集

还在为查重率爆红、AI痕迹太明显、格式乱成一团而发愁&#xff1f;2026 年的 AI 论文工具早已不只是写文章那么简单&#xff0c;从选题构思到降AIGC率、去AI痕迹、查重优化&#xff0c;全流程智能辅助&#xff0c;帮你把论文写作变得简单高效&#xff0c;告别熬夜改稿的焦虑&am…...

UnityExplorer:如何在游戏运行时实时调试和修改Unity项目

UnityExplorer&#xff1a;如何在游戏运行时实时调试和修改Unity项目 【免费下载链接】UnityExplorer An in-game UI for exploring, debugging and modifying IL2CPP and Mono Unity games. 项目地址: https://gitcode.com/gh_mirrors/un/UnityExplorer UnityExplorer是…...

面试官问LinkedBlockingQueue和ArrayBlockingQueue区别?别只答有界无界了,这3个实战坑才是重点

面试官追问LinkedBlockingQueue与ArrayBlockingQueue&#xff1f;别只答基础区别&#xff0c;这3个实战陷阱才是关键 当面试官抛出"LinkedBlockingQueue和ArrayBlockingQueue有什么区别"这个问题时&#xff0c;80%的候选人会条件反射般回答"一个有界一个无界&qu…...