[toc]
redis持久化
1.什么是持久化?
持久化:就是将内存中的数据,写入到磁盘上,并且永久存在
2.redis持久化类型
-
RDB
-
AOF
RDB和AOF对比
定义对比
优缺点对比
工作方式对比
命令 | 启动优先级 | 体积 | 恢复速度 | 数据安全性 | 轻重 |
---|---|---|---|---|---|
RDB | 低 | 小 | 快 | 丢数据 | 重 |
AOF | 高 | 大 | 慢 | 根据策略决定 | 轻 |
2.1 RDB持久化
2.1.1 RDB持久化介绍
可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)
2.1.2 RDB持久化优点
- RDB是一种表示某个即时点的Redis数据的紧凑文件。RDB文件适合用于备份。例如,你可能想要每小时归档最近24小时的RDB文件,每天保存近30天的RDB快照。这允许你很容易的恢复不同版本的数据集以容灾
- RDB非常适合于灾难恢复,作为一个紧凑的单一文件,可以被传输到远程的数据中心
- RDB最大化了Redis的性能,因为Redis父进程持久化时唯一需要做的是启动(fork)一个子进程,由子进程完成所有剩余工作。父进程实例不需要执行像磁盘IO这样的操作
- RDB在重启保存了大数据集的实例时比AOF要快
2.1.3 RDB持久化缺点
- 当你需要在Redis停止工作(例如停电)时最小化数据丢失,RDB可能不太好。你可以配置不同的保存点(save point)来保存RDB文件(例如,至少5分钟和对数据集100次写之后,但是你可以有多个保存点)。然而,你通常每隔5分钟或更久创建一个RDB快照,所以一旦Redis因为任何原因没有正确关闭而停止工作,你就得做好最近几分钟数据丢失的准备了
- RDB需要经常调用fork()子进程来持久化到磁盘。如果数据集很大的话,fork()比较耗时,结果就是,当数据集非常大并且CPU性能不够强大的话,Redis会停止服务客户端几毫秒甚至一秒。AOF也需要fork(),但是你可以调整多久频率重写日志而不会有损(trade-off)持久性(durability)
2.1.4 RDB持久化优缺点总结
- 优点:速度快,适合于用作备份,主从复制也是基于RDB持久化功能实现的
- 缺点:会有数据丢失、导致服务停止几秒