Redis学习笔记:持久化 RDB与AOF

    科技2026-04-05  10

    前言

       Redis是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,数据库状态也会消失,所以Redis提供了持久化的功能。    注意:如果同时开启了RDB和AOF,那么Redis会优先使用AOF来载入。

    RDB(Redis DataBase):默认的持久化方式

    RDB的持久化文件:dump.rdb

       在flushdb, flushall, save,退出Redis时产生dump.rdb)

       在指定的时间间隔内将内存中的数据快照写入磁盘,恢复时将快照文件读入到内存中。    在redis启动时会检查有无dump.rdb,恢复其中的数据。

    过程:

       Redis会创建一个(fork)子进程来进行持久化,先将数据写入到一个临时文件中,等持久化的进程都结束了,再用这个临时文件替换上次持久化好的文件。而这整个过程中,主进程是不进行任何IO操作的,这保证了极高的性能。

    优点:

       如果需要进行大规模数据的恢复,且对恢复的完整性不是很敏感,那么RDB方式比AOF方式更加的高效。

    缺点:

       RDB的缺点是最后一次持久化后的数据可能丢失。(宕机) fork进程会占用一定的内存空间

    AOF(Append Only File):默认是不开启的

       如果需要开启,在文件redis.conf中进行配置,添加语句: appendonly yes

    AOF的持久化文件:appendonly.aof

       以日志的形式来记录每个写操作,只记录写操作,不记录读操作。 只许追加文件不许改写文件。    Redis启动之初会读取该文件。从前到后执行写指令,进行重构数据。    如果appendonly.aof文件被恶意破坏,那么下次重启Redis时会启动失败(连接被拒绝),这是因为appendonly.aof文件无法正常运行。此时我们可以使用redis-check-aof来恢复aof文件-》使用下面的命令:

    redis-check-aof --fix appendly-aof

       但是!被破坏的命令会被删除!即解决有问题的人。

       Redis会记录每次aof文件的大小,如果文件大小大于64MB,就会fork一个新进程将aof文件进行重写。

    优点:

       每一次修改都会同步到aof文件中,文件的完整性会更好。

    缺点:

       每秒同步一次,可能会丢失一秒的数据。    对于持久化文件来说,aof的大小远远大于rdb,修复数据也比rdb慢。

    Processed: 0.016, SQL: 10