Redis数据持久化
介绍了Redis的数据持久化技术的四种数据持久化方案:RDB(快照/内存快照),AOF(日志形式记录数据的增减和修改操作),虚拟内存(VM,已不推荐使用),和DISKSTORE(一个技术设想,未广泛采用)。文章详细解释了RDB和AOF的工作原理、优缺点、以及它们的配置和使用方法。此外,还探讨了RDB和AOF混合持久化的概念,包括日志重写的过程和自动进行日志重写的参数设置。
介绍了Redis的数据持久化技术的四种数据持久化方案:RDB(快照/内存快照),AOF(日志形式记录数据的增减和修改操作),虚拟内存(VM,已不推荐使用),和DISKSTORE(一个技术设想,未广泛采用)。文章详细解释了RDB和AOF的工作原理、优缺点、以及它们的配置和使用方法。此外,还探讨了RDB和AOF混合持久化的概念,包括日志重写的过程和自动进行日志重写的参数设置。
一、Redis的四种数据持久化方案
RDB
快照/内存快照,根据一定的时间间隔将全部数据写入磁盘;
优点:
缺点:
AOF
类似MySQL的BINLOG,以日志形式记录了对数据的增减和修改操作,可以通过日志还原数据;
优点:日志有可读性,安全性高;
缺点:文件较大,非二进制数据恢复速度较慢。
虚拟内存(VM)
从2.4版本开始Redis官方明确表示不建议使用VM持久化方案,从3.2版本开始不再提供VM持久化方案的范例
DISKSTORE
DISKSTORE是在2.8版本提出的一个技术设想,目前没有任何LTS版本明确建议使用此方案,同时也没有相关的技术支持。
二、RDB数据快照
RDB数据快照基于两个命令:SAVE 和 BGSAVE
SAVE
由于Redis是单线程的,在生产环境下数据量可能很大,使用SAVE会在一定时间内阻塞其他命令的执行。
BGSAVE
即后台存储,redis主进程会执行fork操作创造一个子进程,RDB操作由这个子进程负责,完成后进程自动终止;在fork时会发生阻塞,但持续时间很短。
具体流程如下:
手工触发BGSAVE
自动触发持久化
触发持久化的四种情况
修改配置文件,添加自动触发持久化参数
save M-seconds N-changes : 在M秒内有N次修改时,触发持久化操作
RDB数据恢复
RDB不同情况下的进程终止触发持久化的问题
没配置save参数
配置了save参数
RDB总结
RDB持久化的优点
缺点
三、AOF日志
Redis是“写后”日志,Redis先执行命令,把数据写入内存,然后才记录日志。日志里记录的是Redis收到的每一条命令,这些命令是以文本形式保存。
AOF日志记录的步骤
日志写入策略
基于三种写入策略将AOF_Buffer缓冲区内的数据写入到日志中
Always
每个命令执行完毕,立即同步写入日志到磁盘
优点:可靠性强,数据基本不丢
缺点:
Everysec
每个命令执行完毕,日志只会写入AOF文件的内存缓冲区,每隔一秒把缓冲区的日志写入到磁盘。
优点:性能和安全性平衡
缺点:宕机会丢失1秒内的数据
No
每个命令写完,日志只写入AOF文件的内存缓冲区,操作系统自由调度,持久化到磁盘。
优点:性能足够好
缺点:宕机时,不确定丢失的数据
以上三种写入策略本质上是在可靠性和性能之间做取舍
开启AOF功能
添加AOF参数到配置文件
四、RDB和AOF混合持久化
日志重写
在redis中使用BGREWRITEAOF命令重写AOF日志;重写后生成的AOF日志将剔除可读操作,将现有数据写为二进制RDB数据;
当再有新数据写入时,会自动在RDB数据下面写入AOF日志,直到再次通过BGREWRITEAOF命令,将上下两个部分合并为一段RDB数据。
自动进行日志重写的参数
auto-aof-rewrite-percentage
当新写入的数据大小相当于前一次写入的一定百分比时,执行日志重写,需要结合auto-aof-rewrite-min-size,设定一个进行重写的日志最小值
auto-aof-rewrite-min-size
启用日志重写的最小值,如果日志没有达到这个大小,那么即使满足了auto-aof-rewrite-percentage的设定也不会重写。
Read Next
使用Terraform在Ubuntu中部署KVM虚拟机
使用Terraform部署KVM虚拟机的详细流程
MySQL/Redis相关面试题
数据库运维(MySQL和Redis)的面试题总结
事件源模式和传统数据库方法在数据管理上的优劣分析
对事件源模式和传统数据库方法在应用程序性能影响、性能、扩展性和可靠性的分析;以及云原生环境下数据管理的最佳实践
关于Metrics_server在自托管环境下无法使用的问题
修复kubernetes的metrics server在自托管环境下因缺少CA证书而无法运行的问题。