返回题库数据库刷题Redis 选择题 · 第 3 / 4 篇

持久化与过期淘汰

041 RDB 持久化的本质是?

难度: 基础

  • A. 按策略生成内存数据的二进制快照文件(dump.rdb)
  • B. 记录每条写命令的追加日志
  • C. 只保存热 key,不保存全部数据
  • D. 保存 SQL 语句用于恢复
查看答案与解析

正确答案A

正确原因: RDB 是某个时间点的数据快照,恢复速度快。

关键边界: 可能丢失最后一次快照之后的写入,需结合 AOF 或定期快照。

错误选项辨析: 逐条记录写命令是 AOF,RDB 保存全部键值而非 SQL。

042 AOF 持久化的本质是?

难度: 基础

  • A. 以追加方式记录每个写命令,重启时重放恢复
  • B. 只记录读命令
  • C. 定期全量覆盖数据
  • D. 与 RDB 完全相同
查看答案与解析

正确答案A

正确原因: AOF 记录写命令(RESP 协议格式),重启时按序重放。

关键边界: 文件随写入增长,可通过重写压缩。

错误选项辨析: AOF 只记录写命令,不是全量覆盖,机制与 RDB 完全不同。

043 AOF 的三种 fsync 策略是?

难度: 基础

  • A. 快速、普通、慢速
  • B. always、everysec、no
  • C. 同步、半同步、异步
  • D. 立即、延迟、永不
查看答案与解析

正确答案B

正确原因: always 每条命令刷盘最安全最慢,everysec 每秒刷盘是默认权衡,no 交给操作系统。

关键边界: everysec 在极端情况下仍可能丢失约 1 秒数据。

错误选项辨析: 官方策略只有 always、everysec、no 三种命名。

044 混合持久化(aof-use-rdb-preamble)是?

难度: 基础

  • A. 同时写两份 AOF 文件
  • B. AOF 文件头部用 RDB 快照,后续追加增量命令,兼顾恢复速度与数据完整性
  • C. 完全放弃 AOF,只用 RDB
  • D. 混合模式禁止恢复
查看答案与解析

正确答案B

正确原因: Redis 4.0 起支持,加载时先读 RDB 部分再重放增量,恢复更快。

关键边界: 需要同时开启 AOF 并启用该配置。

错误选项辨析: 它只写一份 AOF,不放弃 AOF,恢复流程正常。

045 BGREWRITEAOF 的作用是?

难度: 基础

  • A. 立即删除 AOF 文件
  • B. 把 AOF 转成 RDB
  • C. 后台重写 AOF,去除冗余命令,生成紧凑文件
  • D. 加速 AOF 文件的读取
查看答案与解析

正确答案C

正确原因: 重写由子进程完成,父进程继续服务,期间新写命令进入重写缓冲。

关键边界: 可通过配置自动触发,也可手动执行。

错误选项辨析: 重写是压缩而非删除,不转换文件类型,也不改变读取方式。

046 Redis 删除过期 key 的两种机制是?

难度: 基础

  • A. 只依赖惰性删除
  • B. 只依赖定期删除
  • C. 惰性删除(访问时)加定期删除(后台抽样)
  • D. 由客户端负责删除
查看答案与解析

正确答案C

正确原因: 惰性删除在访问时清理,定期删除后台抽样,两者配合。

关键边界: 过期 key 不会立即消失,是渐进式清理。

错误选项辨析: 单靠一种机制会漏删或耗 CPU,删除完全由服务端负责。

047 设置 maxmemory 后,Redis 的淘汰策略包括?

难度: 基础

  • A. 只有删除全部数据一种
  • B. 只对持久化文件生效
  • C. 淘汰策略与内存无关
  • D. 多种 LRU、LFU、随机与 TTL 类策略(如 allkeys-lru、volatile-ttl)
查看答案与解析

正确答案D

正确原因: Redis 提供 8 种策略,按 allkeys 或 volatile 与 lru、lfu、random、ttl 组合。

关键边界: noeviction 策略下内存写满会拒绝写入。

错误选项辨析: 淘汰只作用于内存数据,策略种类丰富。

048 allkeys-lru 与 volatile-lru 的区别是?

难度: 基础

  • A. 两者完全相同
  • B. volatile-lru 会删除没有过期的 key
  • C. allkeys-lru 只淘汰冷数据且永不删除热数据
  • D. allkeys 从所有 key 中淘汰;volatile 只从设置了过期时间的 key 中淘汰
查看答案与解析

正确答案D

正确原因: 前缀决定候选集:allkeys 是全部 key,volatile 仅限有 TTL 的 key。

关键边界: volatile 系列在无过期 key 时退化为 noeviction 行为。

错误选项辨析: 候选集不同,volatile 不碰无过期 key,LRU 会淘汰最久未访问的数据。

049 LRU 与 LFU 的区别是?

难度: 进阶

  • A. LRU 按最近访问淘汰;LFU 按访问频率淘汰,更能保留高频但偶发的热 key
  • B. LFU 是 LRU 的随机版本
  • C. LRU 记录所有访问次数
  • D. 两者实现完全相同
查看答案与解析

正确答案A

正确原因: LFU 通过计数器统计访问频率,周期性热点数据比 LRU 更不容易被误淘汰。

关键边界: Redis 的 LRU/LFU 都是近似实现,基于抽样。

错误选项辨析: LFU 不是随机版本,LRU 不看次数,两者机制不同。

050 noeviction 策略下内存写满会怎样?

难度: 进阶

  • A. 拒绝写命令并返回 OOM 错误,读命令仍可用
  • B. 自动删除任意 key 继续写入
  • C. 直接崩溃重启
  • D. 暂停所有读请求
查看答案与解析

正确答案A

正确原因: noeviction 不淘汰任何 key,写命令返回错误,读不受影响。

关键边界: 适用于业务不希望数据被淘汰的场景,需监控内存。

错误选项辨析: 不自动删除、不崩溃、不影响读。

051 内存碎片产生的主要原因是?

难度: 进阶

  • A. key 数量太少
  • B. 频繁的分配与释放、不同大小对象交错,导致内存空洞
  • C. CPU 主频太低
  • D. 网络带宽不足
查看答案与解析

正确答案B

正确原因: 分配器无法完全复用释放的空间,形成碎片。

关键边界: 碎片率可用 MEMORY PURGE 或重启缓解,日常监控 used_memory_rss。

错误选项辨析: key 少、CPU、带宽都与碎片无直接关系。

052 Redis 小对象内存优化手段包括?

难度: 进阶

  • A. 给所有 key 加超长前缀
  • B. 使用紧凑编码、共享整数、控制字段数量
  • C. 用大量空 List 占位
  • D. 关闭内存统计
查看答案与解析

正确答案B

正确原因: listpack/ziplist 紧凑编码与整数共享可显著减少小对象内存。

关键边界: hash-max-listpack-entries 等阈值参数可调,需权衡转换成本。

错误选项辨析: 超长前缀与空占位只会浪费内存,关闭统计不能优化内存。

053 RDB 快照(BGSAVE)的 fork 子进程与 COW 关系是?

难度: 进阶

  • A. 快照期间 Redis 完全停止服务
  • B. 子进程与父进程共享全部内存页且不复制
  • C. 子进程快照期间父进程继续写,靠写时复制(COW)保证快照一致性
  • D. COW 只在 AOF 模式生效
查看答案与解析

正确答案C

正确原因: fork 后子进程读内存生成快照,父进程写页时复制该页,保证快照一致。

关键边界: 写密集时 COW 会放大内存占用。

错误选项辨析: 快照不停止服务,COW 需要复制被写的页,RDB 与 AOF 都可能涉及。

054 RDB 与 AOF 选型的一般建议是?

难度: 进阶

  • A. 只能二选一,不能共存
  • B. AOF 恢复速度总是快于 RDB
  • C. 追求恢复速度用 RDB,追求少丢数据用 AOF,两者可同时开启
  • D. RDB 一定比 AOF 更安全
查看答案与解析

正确答案C

正确原因: RDB 恢复快,AOF 丢失窗口小,生产常用 AOF 加定期 RDB 组合。

关键边界: 8.0 起支持 RDB 增量持久化,需按业务权衡。

错误选项辨析: 两者可共存,AOF 恢复通常更慢,RDB 的安全性取决于快照频率。

055 持久化文件损坏时怎么办?

难度: 基础

  • A. 数据库会自动从备份云恢复
  • B. 文件损坏不影响任何数据
  • C. 必须重装系统才能恢复
  • D. 用 redis-check-rdb 或 redis-check-aof 工具检查修复,坏数据可能被丢弃
查看答案与解析

正确答案D

正确原因: 官方工具可诊断并尽力修复,损坏尾部可能被截断丢弃。

关键边界: 定期演练备份恢复流程比临时修文件更重要。

错误选项辨析: 不会自动云端恢复,损坏会影响数据,也无需重装系统。

056 主从首次全量同步如何传输数据?

难度: 进阶

  • A. 从库逐条执行所有历史命令
  • B. 主库把整个数据目录复制给从库
  • C. 从库只接收 binlog 文件
  • D. 主库生成 RDB 快照发给从库,从库加载后继续接收增量
查看答案与解析

正确答案D

正确原因: 全量阶段传输 RDB 加期间新增命令缓冲,从库加载后追增量。

关键边界: 数据量大或网络差时全量耗时明显,可优化 backlog 避免频繁全量。

错误选项辨析: 历史命令回放不现实,复制的是 RDB 而非目录或 binlog。

057 大 key 对持久化的影响是?

难度: 实战

  • A. RDB 快照与 AOF 重写时大 key 序列化耗时,可能造成阻塞与写放大
  • B. 大 key 只影响读命令
  • C. 持久化自动跳过所有大 key
  • D. 大 key 对内存没有任何占用
查看答案与解析

正确答案A

正确原因: 大 key 的序列化、传输与删除都可能阻塞主线程并放大 I/O。

关键边界: 应拆分或控制单 key 大小,定期扫描大 key。

错误选项辨析: 大 key 影响读写与持久化,不会自动跳过,占用大量内存。

058 AOF 使用 everysec 时出现主线程阻塞的可能原因是?

难度: 实战

  • A. everysec 永远不会阻塞
  • B. 磁盘 I/O 慢导致 fsync 队列积压,write 系统调用阻塞主线程
  • C. 阻塞只发生在 always 且与磁盘无关
  • D. 阻塞会由从库自动接管
查看答案与解析

正确答案B

正确原因: everysec 由后台线程 fsync,但磁盘极慢时积累的写请求仍可能阻塞主线程。

关键边界: 需监控 aof_pending 等指标,必要时换磁盘或调参。

错误选项辨析: everysec 也可能阻塞,阻塞与磁盘性能相关,从库不接管。

059 数据安全与性能的权衡中?

难度: 基础

  • A. 关闭持久化后数据也绝对安全
  • B. 刷盘频率与性能无关
  • C. 刷盘越频繁数据越安全但性能越差,需按业务丢失容忍度选择
  • D. 所有业务都必须用 always
查看答案与解析

正确答案C

正确原因: always 最安全但吞吐低,不持久化性能最好但重启全丢。

关键边界: everysec 是常见折中,可按业务重要性分级配置。

错误选项辨析: 关闭持久化不安全,刷盘影响性能,并非所有业务都适合 always。

060 实例故障恢复时,Redis 的加载顺序是?

难度: 进阶

  • A. 同时加载两份并合并
  • B. 只加载 RDB,忽略 AOF
  • C. 恢复由客户端决定
  • D. 优先加载 AOF(若开启),否则加载 RDB
查看答案与解析

正确答案D

正确原因: AOF 数据更完整,开启时优先加载,无 AOF 才用 RDB。

关键边界: 加载大文件期间实例不可服务,需预留时间。

错误选项辨析: 不会合并加载,AOF 优先于 RDB,恢复由服务端决定。

官方资料

当前分类

Redis 选择题

查看全部分类 →
  1. 01数据结构与命令20 题
  2. 02缓存与性能20 题
  3. 03持久化与过期淘汰20 题
  4. 04高可用与集群20 题
ESC

输入关键词开始搜索