> 文章列表 > Redis持久化机制

Redis持久化机制

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

Redis持久化机制

我们可以通过save和bgsave来手动触发RDB持久化。

Redis持久化机制

  • 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即可以关闭