Redis 的持久化机制有哪些?

Redis持久化机制(面试结构化)

Redis持久化就是把内存的数据保存到磁盘,防止宕机数据全部丢失,有两种:RDB、AOF,也可以两者同时开启。

1. RDB(快照)

把某一时刻全量内存数据,生成一个二进制快照文件dump.rdb保存磁盘。

触发方式

  1. 手动触发
    save:主线程同步执行,会阻塞,大数据量不建议用。
    bgsave:fork子进程,子进程做快照,主线程继续处理请求,日常主要用这个。
  2. 自动触发 :配置save 秒 改动次数,比如save 900 1,900秒内至少1个key改动,自动执行bgsave。

优点

  • 文件体积小,二进制文件,适合做备份、迁移。
  • 恢复速度快,直接加载rdb文件。

缺点

  • 会丢失最后一次快照之后的数据:两次快照之间宕机,这部分内存数据没落地磁盘,直接丢失。
  • fork子进程时,如果数据量大,会短暂阻塞主线程。

2. AOF(追加日志)

记录每一条写命令,以文本日志形式追加到aof文件;Redis重启时,重新回放日志命令恢复数据。

三种刷盘策略 appendfsync

  1. always:每写一条就刷磁盘,几乎不丢数据,性能很差。
  2. everysec:每秒刷一次磁盘,默认配置,最多丢失1秒数据,性能和安全折中。
  3. no:交给操作系统自己刷盘,不可控,丢失数据多。

AOF重写 bgrewriteaof

AOF日志会越写越大。重写会fork子进程,读取当前内存数据,生成一份精简AOF日志,替换旧大文件,不会记录无效的中间命令。

注意:重写不会阻塞主线程。

优点

  • 数据丢失极少,默认everysec最多丢1秒数据,安全性高。

缺点

  • AOF日志文件体积一般比RDB大;恢复数据需要回放命令,速度慢于RDB。

3. RDB + AOF同时开启

Redis4.0以后混合持久化:

bgsave生成RDB快照,同时把快照之后增量写命令追加到AOF,aof文件开头是rdb二进制,后面是aof日志。

  • 恢复的时候:先加载rdb快照,再回放后面增量AOF命令。
    兼顾RDB恢复快、AOF丢失少的优点。

注意:同时开启时,Redis重启优先加载AOF文件。

4. 各自适用场景

  • RDB:适合定时冷备份,可以容忍少量数据丢失。
  • AOF:追求数据安全,不想丢失大量数据,线上一般开启AOF。

总结

  1. RDB:全量快照,bgsave子进程,恢复快,存在数据丢失风险;
  2. AOF:记录写命令日志,三种刷盘策略,靠AOF重写压缩文件;
  3. 4.0+支持混合持久化,线上最推荐;
  4. 两种持久化都会fork子进程,大数据量要注意fork带来的短暂阻塞。
相关推荐
2301_780789662 小时前
跨平台适配!SDK 游戏盾兼容全终端游戏场景
java·网络·ddos
ClickHouseDB2 小时前
ClickHouse Cloud 与 Snowflake 实时性价比对比:CostBench 测试中的 412 倍差距来
运维·数据库·系统架构
m0_639906942 小时前
Redis入门|五种数据结构、使用场景、持久化RDB&AOF
数据结构·数据库·redis
学长毕设2 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
时间售卖铺3 小时前
触发器与函数实战:MySQL高效编程秘诀
运维·数据库·mysql·云原生
qetfw3 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
步行cgn3 小时前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
龙亘川3 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
金銀銅鐵3 小时前
[Java] 用 CLI 展示 EnumMap 增删键值对时的内部变化
java·源码·ai编程
秋天的怀念_David3 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法