news 2026/4/16 18:02:19

华为OD技术面真题 - 数据库Redis - 2

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
华为OD技术面真题 - 数据库Redis - 2

文章目录

  • 说说Redis的持久化机制
    • RDB持久化
    • AOF持久化
    • 混合模式
  • 不同持久化方案适合什么场景
  • Redis内存淘汰策略了解吗
  • 什么是Redis事务

说说Redis的持久化机制

Redis是内存数据库,如果不提供持久化机制,当redis进程退出或者宕机时,数据会丢失。redis为了保证重启/宕机等情况保证数据不全部丢失,提供了持久化机制。

Redis提供三种持久化机制:

  • 快照(RDB)
  • 可追加文件(AOF)
  • RDB和AOF混合持久化

RDB持久化

RDB持久化本质上是创建当前Redis数据的快照RDB文件(副本)。有了RDB文件之后,在发生程序崩溃/重启可利用RDB恢复数据库内容,Redis默认的持久化机制。

RDB持久化触发方式:

  • 手动触发:
    • 手动执行save命令:阻塞当前Redis服务器,直到RDB过程完成为止,对于内存 比较大的实例会造成长时间阻塞,线上环境不建议使用。
    • 手动执行bgsave命令:Redis进程执行fork操作创建子进程,RDB持久化过程由子 进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。
  • 自动触发:
    • redis.conf配置文件默认会有save m n,即在m秒内有n次修改时,自动触发bgsave生成rdb文件。
    • 默认情况下执行shutdown命令,如果没有开启aof持久化,也会自动触发save命令。

RDB持久化的优缺点:

  • 优点:
    • 文件体积小
    • 读取RDB文件恢复数据快。
  • 缺点:
    • RDB方式实时性不够,无法做到秒级的持久化;
    • fork 子进程有性能和内存压力。

RDB也是进行主从同步数据的载体。

AOF持久化

AOF的出现是为了解决 RDB 数据丢失窗口过大的问题,提供更好的更好实时性保存的持久化机制。通过更改redis.conf配置文件中appendonly yes来启用AOF持久化。AOF持久化本质上看作一个操作日志文件,通过记录更改数据库的命令,然后落盘到文件中,以达到发生程序崩溃/重启时重放命令恢复数据,。

AOF的持久化功能实现可分为以下步骤;

  1. 命令追加(append):所有写命令会追加到AOF缓冲区中。
  2. 文件写入(write):将 AOF 缓冲区的数据写入到 AOF 文件中,此步是将AOF缓存区数据写入到操作系统内核缓冲区。此时并没有进行数据落盘
  3. 文件同步(fsync):根据appendfync配置,redis会按照指定频率,调用fync函数,强制数据落盘,保证数写入磁盘文件。这步执行完成后才代表数据真正被保存

redis中提供appendfync策略有以下几种:

  • always: 同步写回,执行写命令之后,立即执行命令追加文件写入步骤,同时主线程调用fsync命令,阻塞同步直到数据落盘。最安全的一种策略,理论上不会丢失数据,同时性能最差
  • Everysec: 每秒写回,每个写命令执行完,先把日志写到AOF文件的内存缓冲区并执行write操作,后台线程每隔一秒执行fync写入磁盘;性能 + 实时性综合的方案
  • No:操作系统控制的写回,reids不会主动执行fsync命令。实时性最差, 性能最好的方案。

上面提高AOF本质是以追加方式记录Redis已经执行的写命令,随着时间越来越长,AOF文件会变得越来越大。如果不加以控制,AOF文件越大,导致数据恢复也越慢,基于此Redis提供AOF重写机制,限制AOF文件不断增长。AOF重写机制原理是通过读取数据库中的键值对来实现的,程序无须对现有 AOF 文件进行任何读入、分析或者写入操作。,步骤大概如下

  1. AOF重写会执行大量写操作,reids将AOF重写使用子进程执行。
  2. AOF 文件重写期间,Redis 还会维护一个AOF 重写缓冲区,该缓冲区会在子进程创建新 AOF 文件期间,记录服务器执行的所有写命令。当子进程完成创建新 AOF 文件的工作之后,服务器会将重写缓冲区中的所有内容追加到新 AOF 文件的末尾,使得新的 AOF 文件保存的数据库状态与现有的数据库状态一致。
  3. 服务器用新的 AOF 文件替换旧的 AOF 文件,代表重写的完成。

混合模式

Redis 4.0 中提出了一个混合使用 AOF 日志和内存快照的方法。简单来说,内存快照以一定的频率执行,在两次快照之间,使用 AOF 日志记录这期间的所有命令操作。

混合模式的优点:

  • 快照不用很频繁地执行,这就避免了频繁 fork 对主线程的影响
  • AOF 日志也只用记录两次快照间的操作,也就是说,不需要记录所有操作了,因此,就不会出现文件过大的情况了,也可以避免重写开销。
  • 既能享受到 RDB 文件快速恢复的好处,又能享受到 AOF 只记录操作命令的简单优势。

不同持久化方案适合什么场景

只使用RDB的场景:

  • 缓存型业务
  • 数据可从关系型数据库或其它途径恢复
  • 容忍数据少量数据丢失。

只使用AOF场景:

  • 可容忍性能下降
  • 数据非常重要
  • 不希望丢失数据

混合模式场景:

  • 生产环境,核心业务
  • 既要保证数据不能丢失
  • 又要保证redis重启恢复数据快

Redis内存淘汰策略了解吗

Redis 的内存淘汰策略只有在运行内存达到了配置的最大内存阈值时才会触发,这个阈值是通过redis.confmaxmemory参数来定义的。

Redis提供以下几种内存淘汰策略:

  • no-eviction:默认内存淘汰策略,禁止驱逐数据,当内存不足以容纳新写入数据时,新写入操作会报错。
  • volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰。
  • volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰。
  • volatile-random: 从已设置过期时间的数据集中任意选择数据淘汰。
  • allkeys-random: 从所有数据集中任意选择数据淘汰。
  • volatile-lfu:从已设置过期时间的数据集中挑选最不经常使用的数据淘汰。
  • allkeys-lfu: 从所有数据集中挑选最不经常使用的数据淘汰。

什么是Redis事务

Redis 事务是通过 MULTI 和 EXEC 将多个命令打包顺序执行的一种机制,能够保证事务执行期间不会被其他客户端的命令打断。Redis 事务不支持回滚,也不具备关系型数据库事务的完整 ACID 特性。

实际开发过程中,不太推荐使用Redis事务。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 16:41:10

当心电图遇上AI魔法:小波散射网络如何实现99.9%的疾病识别

基于小波时间散射网络的ECG 信号分类 程序运行环境为MATLAB r2021b 该程序使用小波时间散射网络和支持向量机分类器对人体心电图 (ECG)信号进行分类。 在小波散射中,数据通过一系列的小波变换、非线性化和平均化过程,以产生时间序…

作者头像 李华
网站建设 2026/4/16 11:59:11

企微全自动化运营的可视化与度量

QiWe开放平台 个人名片 API驱动企微自动化,让开发更高效 核心能力:为开发者提供标准化接口、快速集成工具,助力产品高效拓展功能场景 官方站点:https://www.qiweapi.com 团队定位:专注企微API生态的技术服务团队 对接…

作者头像 李华
网站建设 2026/4/16 7:24:54

9 款 AI 写论文哪个好?实测封神!宏智树 AI 凭真素材碾压同类

作为深耕论文写作科普的教育博主,每年毕业季都要实测数十款 AI 写论文工具,后台被问爆 “9 款 AI 写论文哪个好”。这次我筛选了目前市面上最热门的 9 款真实 AI 工具(无杜撰),以 “毕业论文全流程” 为核心场景&#…

作者头像 李华