美文网首页
Redis持久化(RDB和AOF)

Redis持久化(RDB和AOF)

作者: 宁静的猫 | 来源:发表于2019-11-15 12:05 被阅读0次

    将Redis中的数据存储到硬盘上有两种方式,RDB和AOF

    1、RDB

    RDB文件是Redis中所有数据生成的一个快照,有3种方式生成RDB文件,如下所示:
    a、save命令,阻塞的创建RDB文件,若存在老的RDB文件,新的替换掉老的,复杂度O(n)
    b、bgsave命令,Redis调用fork()函数生成子进程,由子进程异步创建RDB文件
    c、配置规则,推荐配置文件样例如下:

    dbfilename dump-${port}.rdb //指定RDB文件名称
    dir /bigdishpath //指定RDB文件保存到一个比较大的硬盘目录下
    stop-writes-on-bgsave-error yes //bgsave出现问题时,停止写入
    rdbcompression yes //开启rdb文件的压缩
    rdbchecksum yes //采用校验和的方式
    

    另外,在全量复制、debug reload、shutdown等场景下,也会生成RDB文件。

    2、AOF

    RDB是一种耗时、耗性能的操作,在Redis宕机的情况下,仍然会丢失数据。针对这种情况,可以采用AOF。

    AOF的原理是:在每执行一条Redis命令后,都记录到AOF文件中,如果Redis发生宕机,可以用AOF对数据进行恢复。

    AOF的3种策略:
    a、always,每执行一条命令,就将其写入硬盘的AOF文件。
    b、everysec,每隔一秒,把执行的命令写入AOF文件。
    c、no,由操作系统决定什么时候把数据从缓冲区刷入硬盘。

    AOF重写:
    AOF重写会去除过期的数据,优化需要执行的Redis命令,达到减少硬盘占用量和加快恢复速度的目的。可以通过bgrewriteaof或者AOF重写配置来实现AOF重写。
    a、bgrewriteaof命令会fork出一个子进程,对当前Redis中数据进行回溯,重写出一个A OF文件。
    b、AOF重写配置项如下:

    auto-aof-rewrite-min-size //AOF文件重写需要的尺寸
    auto-aof-rewrite-percentage //AOF文件增长率
    

    AOF重写自动触发需要满足如下2个条件:
    1、aof_current_size>auto-aof-rewrite-min-size
    2、aof_current_size - aof_base_size/aof_base_size>auto-aof-rewrite-percentage

    3、总结

    RDB和AOF对比,AOF启动优先级更高,操作更轻;RDB体积更小,恢复速度更快,会丢数据。
    a、RDB最佳策略:在配置文件中关闭RDB;集中管理,可以按小时、天备份;从节点可以开启RDB
    b、AOF最佳策略:大部分情况下打开;AOF重写集中管理;建议设置everysec

    相关文章

      网友评论

          本文标题:Redis持久化(RDB和AOF)

          本文链接:https://www.haomeiwen.com/subject/zasjictx.html