[Redis]-持久化方式
森格 | 2022年11月
本文是在学习Redis中,对Redis持久化的个人总结。
一、 持久化与Redis
1.1 什么是持久化
持久化是一种将程序数据在瞬时状态和持久状态间的转换机制,也就是把数据保存到可永久保存的存储设备中去。
1.2 Redis的持久化
对于Redis持久的意义在于故障恢复,尽量Redis做cache缓存可以保存部分重要数据,但是没有持久化,一旦发现灾难性故障,就会丢失所有数据。
下面一起了解下Redis时如何实现持久化的。
二、Redis的持久化
2.1 RDB方式
RDB,全称Redis Database Backup File,即Redis数据备份文件,也被称为Redis数据快照。
1) RDB的格式
相关参数
2) RDB的执行
手动执行
通过save执行,但该命令由Redis主进程执行,由于Redis是单线程的,所以会阻塞其他命令。
自动执行
这种方式基于Redis的主动停机,对于宕机不会执行。
周期执行
在Redis的配置文件redis.conf中可以看到RDB的触发机制(快照规则)。
3)RDB原理
简单来说,由父进程fork派生出一个子进程,由子进程来生成临时的RDB文件,再进行写入到正式RDB文件。
4)RDB优缺点
优点:
● 占用空间小,RDB为二进制文件且可以压缩。
● Redis性能最大化,父进程只需要fork一个子进程,其他工作都由子进程操作。
缺点:
● 数据不完整,Redis异常退出时,最后一次快照之后的数据丢失。
2.2 AOF方式
AOF,Append Only File(追加文件),也就是说,Redis会将执行的写入命令都记录在文件中,这种方式就是AOF。
1) AOF参数
开关,文件名
记录频率
2) 执行频率对比
● no
性能最高,安全性最低。写入和保存由主进程执行,存在写入阻塞,没有保存阻塞,因为保存发生在AOF关闭或Redis关闭时执行;如果中途停机,丢失数据量由操作系统OS的缓存刷洗策略决定。
● everysec
兼顾性能和安全性。写入由主进程执行,阻塞主进程,保存由子进程执行,不直接阻塞主进程;最多会丢失1秒数据。
● always
安全性最高,性能最差。写入和保存由主进程执行,虽然数据可靠性高,但同步刷盘,造成服务器可能长时间阻塞,极大拉低了性能。
频率配置项 | 刷盘时机 | 优点 | 缺点 |
---|---|---|---|
no | 操作系统决定 | 性能最佳 | 可靠性最差,可能丢失大量数据 |
everysec | 每秒刷盘 | 兼容性能与安全性 | 最多丢失1秒数据 |
always | 同步刷盘 | 数据可靠性最佳 | 性能最差 |
3) AOF原理
AOF文件瘦身
4) AOF优缺点
优点
● 性能高,数据丢失少。默认刷盘策略为每秒一次,最多丢失1秒的数据。
缺点
● 文件体积大。对相同数据集,AOF的体积要大于RDB
二、 总结
最后,用图表对本文上述内容做简单总结:
RDB | AOF | |
---|---|---|
持久化原理 | 对内存做快照 | 记录每一次的命令 |
文件大小 | 压缩后文件体积小 | 相对RDB文件体积较大 |
数据完整性 | 不完整,丢失两次快照之间的数据 | 相对完整,最多丢失1秒的数据 |
数据恢复优先级 | 低,因为数据完整性不如AOF小 | 高,数据完整性高 |