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单线程为什么这么快
命令执行基于内存操作,单条命令操作时间是几十纳秒
命令执行是单线程操作,避免了多线程上下文切换开销
高效的数据结构,包括全局Hash表、简单动态字符串、双向链表、跳跃表、整数数组
基于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哨兵模式架构原理
优点:可以动态切换主从库,中心型公司首选
缺点:
- 单个master主节点提供写服务,redis存储的数据有限(<10G),并发量不足(<3w)
- 自动切换主从库会产生访问瞬断的情况,切换没有那么快
工作原理:
哨兵是一个分布式系统,可以在一个架构中运行多个哨兵进程,这些进程使用流言协议(gossip protocols)来传播Master是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移以及选择哪个Slave作为新的Master。哨兵模式的简单工作原理如下:
(1)监控:哨兵会不断地检查你的Master和Slave是否运作正常。
(2)提醒:当被监控的某个Redis节点出现问题时,哨兵可以通过 API 向管理员或者其他应用程序发送通知。
(3)自动故障迁移:当Master不能正常工作时,哨兵会进行自动故障迁移操作,将其中一个Slave升级为新的Master
6. redis高可用集群架构原理
redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片存储特性
redis集群将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展,可线性扩展到上万个节点(官方推荐不超过1000个节点)
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文件,恢复速度慢于rdb2、Aof运行效率要慢于rdb,每秒同步策略效率较好,不同步效率和rdb相同
redis默认使用AOF恢复数据,因为aof保存的数据更全面
9. redis持久化之混合持久化
背景:
- 重启Redis时,我们很少只使用RDB来恢复内存数据,因为这会丢失大量数据
- 通常使用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 交换一个字节(模式0) 3.4 交换一个字节(模式1) 3.5 交换一个字节(模式2) 3.6 交换一个字节&a…...

实战:生成个性化词云的Python实践【7个案例】
文本挖掘与可视化:生成个性化词云的Python实践【7个案例】 词云(Word Cloud),又称为文字云或标签云,是一种用于文本数据可视化的技术,通过不同大小、颜色和字体展示文本中单词的出现频率或重要性。在词云中…...
云存储与云计算详解
1. 云存储与云计算概述 1.1 云存储 云存储(Cloud Storage)是指通过互联网将数据存储在远程服务器上,用户可以随时随地访问和管理这些数据。云存储的优点包括高可扩展性、灵活性和成本效益。 1.2 云计算 云计算(Cloud Computin…...

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

网络安全的重要组成部分:数据库审计
数据库审计(简称DBAudit)以安全事件为中心,以全面审计和精确审计为基础,实时记录网络上的数据库活动,对数据库操作进行细粒度审计的合规性管理,对数据库遭受到的风险行为进行实时告警。它通过对用户访问数据…...
gc和gccgo编译器
Go 语言有两个主要的编译器,分别是 Go 编译器(通常简称为 gc)和 GCCGO。它们之间有一些重要的异同点: gc 编译器: gc 是 Go 语言的官方编译器,由 Go 语言的开发团队维护。它是 Go 语言最常用的编译器&#…...
开放重定向漏洞
开放重定向漏洞 1.开放重定向漏洞概述2.攻击场景:开放重定向上传 svg 文件3.常见的注入参数 1.开放重定向漏洞概述 开放重定向漏洞(Open Redirect)是指Web应用程序接受用户提供的输入(通常是URL参数),并将…...

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

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

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

光环P3O不错的一个讲座
光环P3O不错的一个讲座,地址: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 是一种由微软开发的开源编程语言,它是 JavaScript 的一个超集。它添加了静态类型和面向对象的特性,并提供了更强大的工具和功能,以增强 JavaScript 的开发体验。 二、为什么要学习 …...

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

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

快手二面准备【面试准备】
快手二面准备【面试准备】 前言版权快手二面准备秋招一面中的问题实习一面中的问题计算机网络和操作系统论坛项目登录注册ThreadLocal代替session存储用户秒杀项目登录注册->阿里验证码->rpcsession为什么改为token实现,redis存储用户信息由binlog的用法->…...
贪心算法2(c++)
最大子矩阵 描述 已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1*1)子矩阵。 比如,如下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) 发现报错,经过测试只能传入10个字符多了就会报错 利用python中help()函数,借报错信息带出flag变…...
软考备考三
操作系统 操作系统概述 功能:组织和管理软件,硬件资源以及计算机系统中的工作流程,控制程序的执行,向用户提供接口。 分类: 1.批处理操作系统 单道批 多道批(宏观上并行,微观上串行)…...
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…...

Qt/C++学习系列之列表使用记录
Qt/C学习系列之列表使用记录 前言列表的初始化界面初始化设置名称获取简单设置 单元格存储总结 前言 列表的使用主要基于QTableWidget控件,同步使用QTableWidgetItem进行单元格的设置,最后可以使用QAxObject进行单元格的数据读出将数据进行存储。接下来…...
Git 切换到旧提交,同时保证当前修改不丢失
在 Git 中,可以通过以下几种方式切换到之前的提交,同时保留当前的修改 1. 使用 git checkout 创建临时分离头指针(推荐用于查看代码) git checkout <commit-hash>这会让你进入"分离头指针"状态,你可…...

2025年ESWA SCI1区TOP,自适应学习粒子群算法AEPSO+动态周期调节灰色模型,深度解析+性能实测
目录 1.摘要2.粒子群算法PSO原理3.改进策略4.结果展示5.参考文献6.代码获取7.算法辅导应用定制读者交流 1.摘要 能源数据的科学预测对于能源行业决策和国家经济发展具有重要意义,尤其是短期能源预测,其精度直接影响经济运行效率。为了更好地提高预测模型…...

使用MounRiver Studio Ⅱ软件写一个CH592F芯片的ADC采集程序,碰到的问题
MounRiver Studio Ⅱ 默认是不开启浮点计算的,所以有些浮点功能不能用,碰到问题是 while (1) {DelayMs (100);tmp Read_Temperature (0);sprintf (tempBuffer, "temp:%.2f\r\n", tmp); // 格式化温度值到字符串。使用%f要开启相应的…...
微前端 - Native Federation使用完整示例
这是一个极简化的 Angular 使用angular-architects/native-federation 插件的微前端示例,只包含一个主应用和一个远程应用。 完整示例展示 项目结构 federation-simple/ ├── host-app/ # 主应用 └── remote-app/ # 远程应用 创建远程应用 (remote…...
AI编程助手入门指南:GitHub Copilot、Cursor与Claude的安装与基础使用
🔥 AI编程助手入门指南:GitHub Copilot、Cursor与Claude的安装与基础使用 你是否曾幻想过拥有一个24小时在线的编程搭档?它能理解你的思路、自动补全代码、解释复杂逻辑,甚至帮你调试错误?如今,这个幻想已成…...
Spark 写文件
Repartition Spark 输出文件数量 假设每个 Task 的输出数据都包含了全部 8 个分区值,那么最终的文件生成情况如下: 总文件数 = Task 数量 分区组合数 假设: Task 数量:200 分区组合数:8 个 (from_cluster 和 ds 的组合) 则: 总文件数:200 8 = 1600 …...

Spring Boot 常用注解面试题深度解析
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot 常用注解面试题深度解析一、核心…...

linux下gpio控制
linux下gpio控制 文章目录 linux下gpio控制1.中断命令控制/sys/class/gpio/export终端命令控制led 2.应用程序控制 3.驱动代码控制 1.中断命令控制 通用GPIO主要用于产生输出信号和捕捉输入信号。每组GPIO均可以配置为输出输入以及特定的复用功能。 当作为输入时,内…...

Virtex II 系列FPGA的配置原理
对FPGA 芯片的配置,本质上是将根据设计生成的包含配置命令和配置数据的比特流文件写入到配置存储器中。 1 配置模式 Virtex II 系列FPGA 一共有五种配置模式,配置模式的选择是根据管脚M[2:0]来决定。 (1)串行配置模式 串行配置模…...