Redis持久化机制
大家好!大勇来了,今天继续分享的是Redis中的两种持久化机制…
持久化机制
Redis中有两种持久化机制,分别是RDB和AOF两种方式,在Redis4.0之后,还出现了RDB和AOF混合使用的持久化机制。
RDB
RDB(Redis Database Backup) 称为数据快照,把内存中的数据记录到磁盘。
RDB是将这个数据文件保存到dump.rdb,RDB持久化包括手动触发和自动触发。
在redis.conf中可以配置Redis自动化持久化的策略。
自动触发策略:
save m n
在m秒发生n次修改,会自动触发bgsave
我们可以通过save和bgsave来手动触发RDB持久化。
-
save命令:会阻塞当前的Redis服务器,直到RDB过程完成,对于内存比较大的会造成长时间阻塞。
-
bgsave命令:Redis主进程会执行fork操作创建子进程,RDB持久化过程由子进程负责,阻塞只会发生在创建子进程时,比save更快。
AOF
AOF全称为Append Only File(追加文件)。Redis处理的每一个写命令都会记录在AOF文件,在固定时间会进行压缩。
AOF配置:
-
可以通过redis.conf中的appendonly 来配置是否开启AOF功能
-
appendfsync可以配置刷盘策略,Always、everysec、no
AOF可能会出现对一个key有多次写操作,但是只有只有最后一次写操作才有意义。
bgrewriteaof命令会重写,可以用最少的命令达到相同的效果
RDB和AOF的优缺点:
RDB-优点:
-
rdb文件适合全量备份,方便持久化
-
恢复速度快,RDB恢复数据的速度快
-
容灾性好,可以把RDB文件拷贝道远程机器或者文件系统,用于容灾恢复
RDB-缺点:
-
实时性低,执行间隔时间长,没有办法做到实时持久化,有可能发生数据丢失
-
fork子进程、写文件比较耗时
AOF-优点:
-
实时性好,AOF持久化可以配置每进行一次命令操作就记录到AOF文件中一次
-
通过追加append模式写文件,解决数据一致性问题。
AOF-缺点:
-
AOF文件比RDB文件大,且恢复速度慢
-
数据集大的时候,比RDB启动效率低
混合持久化
在重启Redis时,使用RDB恢复内存状态,可能会丢失大量数据,通过AOF日志可能性能要慢很多,重启需要花费很长的时间。
Redis4.0为解决这个问题提出了混合持久化,将rdb文件的内容和增量的AOF日志文件存放在一起,混合持久化时发生于AOF重写过程中,这里的AOF日志不在是全量日志,而是自持久化开始到持久化结束的这段时间发生的增量AOF日志。
于是Redis在重启的时候,可以先加载rdb内容,再加载增量AOF日志就可以完成替代之前的AOF全量文件重放,所以效率会大幅度提升。
可以通过配置aof-use-rdb-preamble 来开启混合持久化,在Redis5已经是默认开启了,设置为no即可以关闭