✨Redis-持久化
type
status
date
slug
summary
category
tags
icon
password
AI summary
Blocked by
Blocking
Category
RDB (Redis Database File)
核心:将某个时间点的所有数据
生成快照(snapshot),保存为二进制文件(默认文件名:dump.rdb)实现原理

- Redis主进程fork一个子进程
- 子进程与主进程基于操作系统的Copy-On-Write(COW)机制共享同一份内存空间
- 子进程把数据序列化写入RDB文件中
- 主进程仍然可以继续处理请求
- 如果主进程在fork后修改了某份数据,OS会复制要修改那部分内存页,而不是整个内存,主进程操作副本
- 子进程依然利用旧的内存数据完成RDB操作
bgsave的参数设置
可以通过配置save的参数,来实现RDB多久触发一次
- 900秒内有 ≥1 次修改则触发
- 300秒内有 ≥10 次修改则触发
- 60秒内有 ≥10000 次修改则触发
RDB的优势和劣势
- pros
- 文件体积小,加载速度快
- 对性能影响小(后台fork的子进程负责持久化)
- 相比于AOF,数据恢复快
- cons
- 无法保存实时的数据
- 对于大内存redis实例,一次fork开销还是挺大的
AOF (Append Only File)
实现原理
核心:将每个写入命令以日志方式追加写入,形成appendonly.aof 文件
不保存数据,只保存“执行过哪些写指令”。

每次写操作:
- Redis 将写命令写入 AOF buffer
- 根据策略决定何时 fsync 写入磁盘
AOF 文件类似于:
持久化参数设置
其中有三种appendfsync的配置参数可以选
Always,这个单词的意思是「总是」,所以它的意思是每次写操作命令执行完后,同步将 AOF 日志数据写回硬盘
Everysec,这个单词的意思是「每秒」,所以它的意思是每次写操作命令执行完后,先将命令写入到AOF 文件的内核缓冲区,然后每隔一秒将缓冲区里的内容写回到硬盘
No,意味着不由Redis控制写回硬盘的时机,转交给操作系统控制写回的时机,也就是每次写操作命令执行完后,先将命令写入到 AOF 文件的内核缓冲区,再由操作系统决定何时将缓冲区内容写回硬盘。

AOF的优缺点
- pros
- 相比于RDB,数据持久化更安全,丢失极少(每秒或更小)
- 日志格式可读性高,可用于排查问题
- 支持Rewrite,实现AOF文件压缩
- cons
- 由于需要大量指令的replay,所以执行数据恢复所需时间长
- AOF以文本方式存储,压缩比例小,文件体积大
- fsync可能造成写压力
使用混合方式实现 数据的持久化
Redis 的4.0+引入了混合模式,结合RDB和AOF的各自优势。
RDB的加载速度很快,AOF的实时性很高,这样可以最大程度避免数据的丢失
配置开启混合持久化
配置AOF的持久化策略
配置多久执行一次RDB快照
工程级的最佳实践
Prev
Redis-缓存
Next
Redis-基础数据类型
Loading...