详解Redis 持久化 | 青训营笔记

65 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天


Redis持久化

Redis为了保证效率,数据缓存在了内存中,但是内存中的数据无法永久保存,若需要永久保存数据,则需要Redis的持久化。

RDB (Redis DataBase)

RDB持久化方式能够在指定的时间间隔内对数据进行快照存储。

Redis会单独创建(fork)一个子进程来进行持久化。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能。

触发机制

  • 满足配置文件中设置的save规则
  • 执行save、bgsave命令

将rdb文件存放在Redis的启动目录,Redis启动时会自动检查dump.rdb,恢复其中的数据。

优点

  • 适合大规模的数据恢复
  • 对数据的完整性不高

缺点

  • 需要一定的时间间隔进程操作,如果Redis意外宕机了,最后一次修改的数据就会丢失
  • fork进程时会占用一定的内存空间

AOF操作

appendonly.aof

只能追加文件,不可以修改文件。

Redis重启时,根据日志文件的内容,将写命令从前到后执行一次,以完成数据的恢复工作。

优点

  • 每一次修改都同步,文件的完整性更好
  • 每秒同步一次,可能会造成丢失
  • 不同步,效率更高

缺点

  • 相对于数据文件来说,aof远远大于rdb,修复速度也比rdb慢
  • aof的运行效率也比rdb慢

以日志的形式来记录每个写操作(不记录读操作),将Redis执行过的所有指令记录下来。先执行命令,后写入日志。

写后日志

对应 MySQL 的写前日志。

Redis不会对命令进行语法检查,避免出现记录错误命令的情况。

缺点:

  • 数据可能丢失:Redis刚执行完命令,发生宕机,未写入日志;
  • 阻塞其他操作:AOF在主线程执行,写日志时会阻塞后续的操作。

如果你发现了文章出现了错误或有不足,欢迎在评论区和我交流,我看到了一定会回复。

写文章不易,如果你觉得文章对你有帮助,麻烦点一下点赞、收藏,你的支持是我写文章的最大动力!