专栏首页漫漫架构路Redis持久化机制总结

Redis持久化机制总结

Redis持久化机制总结

一. Redis持久化概述

  1. 为了应对生产环境下,Redis的故障恢复和数据备份等需求,Redis提供了两种持久化机制,分别是RDB和AOF。
  2. RDB:以特定的时间间隔,保存当前数据库中的全量数据快照。
  3. AOF:以追加日志的形式,将Redis服务器的操作写入日志文件。
  4. 可以不开启任何持久化方案,但是这在生产环境下就是作死
  5. RDB和AOF可以同时启用,但是在这种情况下,Redis服务器重启时,会优先采用AOF文件进行数据的恢复,因为AOF文件中保存的数据是最完整的。

二. RDB机制详解

  1. RDB是以指定的时间间隔(可配置,如1小时、1天等),生成一份当前完整的数据快照文件,它是一份单独的、经过压缩的、二进制形式的文件。在生成RDB快照时,Redis会fork一个子进程,由子进程去执行快照的生成,而父进程正常对客户端提供服务。
  2. 优点
    1. RDB文件非常适合用于数据备份,我们可以定期将Redis备份的RDB文件保存起来,或者上传到云端,以便后期数据校验或数据恢复的需求。
    2. 由于RDB文件是经过压缩的RDB单独的一份二进制文件,因此它非常适合用于灾难恢复。
    3. RDB方式对性能影响较小,父进程只需要fork一个子进程,剩余的事情交给子进程处理就好。
    4. Redis重启时,如果使用RDB文件进行数据恢复会比AOF文件更快。
  3. 缺点
    1. RDB方式无法保证数据的可靠性,如果在生成快照之前服务器宕机就会造成数据的丢失。在对数据可靠性要求较高的场景,仅采用RDB方式显然无法满足需求。
    2. 在数据量较大时,fork子进程去生成快照就会变成一个耗时操作,极端情况下甚至会导致Redis服务毫秒级乃至秒级的停顿。

三. AOF机制详解

  1. AOF是以追加日志的形式保存Redis的操作记录。在写入日志时,Redis会先将操作写入AOF缓存区,然后定期由操作系统调用fsync()函数去刷盘。当AOF文件的大小达到一定条件时,会触发rewrite操作对文件进行压缩。
  2. 优点
    1. AOF机制对数据可靠性有更好的支持。默认情况系,Redis会每秒写1次AOF文件,这样最坏情况下也仅会造成1秒的数据丢失,大多数情况下是可以忍受的。
    2. AOF文件达到一定大小时,会自动触发重写(rewrite),以对文件进行压缩。举个例子:对一个key age执行了100次incr,将其从1变成了100,这样在AOF文件中会保存100条日志。对其进行重写后,就仅剩下一条age的最终值100的日志。
  3. 缺点
    1. 对于相同的数据库来说,AOF文件通常比RDB文件更大。
    2. fsync策略的选择十分影响AOF的性能,如果采用fsync at every query,则会很大程度上降低Redis的性能。

四. 实践建议

  1. 大部分场景下,建议同时开启RDB和AOF两种机制,这样可以兼顾数据的安全和Redis的性能。
  2. 针对可以容忍分钟级数据丢失的场景,可以仅开启RDB。
  3. 不建议关闭RDB而仅使用AOF,因为RDB对于数据的备份和恢复有十分重要的意义。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Redis持久化机制详解

    张申傲
  • RocketMQ详解(12)——RocketMQ的重试机制

    由于MQ经常处于复杂的分布式系统中,考虑网络波动、服务宕机、程序异常因素,很有可能出现消息发送或者消费失败的问题。因此,消息的重试就是所有MQ中间件必须考虑到的...

    张申傲
  • Redis为什么快

    多路-指的是多个socket连接,复用-指的是复用一个线程。多路复用主要有三种技术:select,poll,epoll。epoll是最新的也是目前最好的多路复用...

    张申傲
  • 《【面试突击】— Redis篇》-- Redis哨兵原理及持久化机制

    《【面试突击】— Redis篇》--Redis的线程模型了解吗?为啥单线程效率还这么高?

    编程大道
  • 一文啃下来redis持久化的方式

    如果redis,生成快照失败,那么就会接受数据,此时会返回给用户,持久化失败,此时可以进行如下的配置,禁用掉这个功能。

    mySoul
  • RDB 和 AOF 持久化的原理是什么?我应该用哪一个?它们的优缺点?

    RDB:生成指定时间间隔内的 Redis 内存中数据快照,是一个二进制文件 dumpr.rdb

    搜云库技术团队
  • REdis AOF文件结构分析

    REdis-5.0之前的AOF文件没有文件头,不管是REdis-5.0之前还是REdis-5.0,它们的AOF文件体内容都如下图所示:

    一见
  • redis RDB&&AOF

    大学里的混子
  • Redis 的持久化机制

    RDB文件默认保存在配置文件中dir属性(./)指定的目录下,以dbfilename(dump.rdb)属性指定的文件名命名

    Java学习录
  • Redis持久化

    爱撒谎的男孩

扫码关注云+社区

领取腾讯云代金券