redis持久化

Redis支持RDB和AOF两种持久化机制

RDB持久化

把当前进程数据生成快照保存到硬盘的过程,分为手动触发和自动触发
手动触发:save和bgsave
    save:阻塞当前Redis进程,直到RDB过程完成为止(已废弃)
    bgsave:Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。
自动触发:
    1)使用save相关配置,如“save m n”。表示m秒内数据集存在n次修改时,自动触发bgsave。
    2)如果从节点执行全量复制操作,主节点自动执行bgsave生成RDB文件并发送给从节点
    3)执行debug reload命令重新加载Redis时,也会自动触发save操作。
    4)默认情况下执行shutdown命令时,如果没有开启AOF持久化功能则自动执行bgsave。

整体流程

配置:config set dir{newDir}和config set dbfilename{newFileName}运行期动态执行,当下次运行时RDB文件会保存到新目录。

AOF(append only file)持久化

以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的。(默认不开启)

配置:appendonly yes(开启)

          appendfilename(文件名)

          dir(文件路径)

工作流程:命令写入、文件同步、文件重写、重新加载

命令写入:以文本协议格式将写入命令追加到aof_buf缓冲区中。

        文本协议格式的优点:

             1)文本协议具有良好的兼容性

             2)写入命令直接追加,避免协议间转换带来的二次开销

            3)文本格式便于随时查看和修改

     aof_buf缓冲区的作用:

            1)避免每次写入都直接追加硬盘而带来的性能瓶颈。

            2)redis提供多种缓冲区同步硬盘策略,很好的平衡了性能与安全。

文件同步:aof_buf缓冲区的数据写入aof文件的过程。

        缓冲区同步策略:appendfsync aways|everysec|no

             aways:系统调用fsync操作同步aof文件,fsync完成后线程返回

             everysec:系统调用write操作,write完成后线程返回。fsync操作由专门的线程每秒调用一次。(默认、推荐)

             no:系统调用write操作,不对aof文件做fsync操作,同步硬盘操作由操作系统完成,通常同步周期最长30秒

文件重写:把redis进程中的数据转化为写命令同步到新AOF的过程。

       作用:1)多条写命令合并成一条,压缩aof文件体积,可以更好地被redis加载。

                 2)过滤已超时的数据, 踢出原有文件中的无效命令。 

      手动触发:bgrewriteaof

      自动触发:配置如下参数

                      auto-aof-rewrite-min-size:表示运行AOF重写时文件最小体积,默认为64MB。

             auto-aof-rewrite-percentage:代表当前AOF文件空间(aof_current_size)和上一次重写后AOF文件空间(aof_base_size)的比值。

流程图

fork完成后,所有的修改命令依然会写入aof_buf缓冲区中,并同步到硬盘。为了保证aof期间父进程响应命令的丢失,这部分命令被保存在aof_rewrite_buf(aof重写缓冲区)。新aof写入完成,发送消息给父进程更新统计信息,父进程把重写缓冲区的数据写入新的aof中,写入完成后替换久aof文件。

重新加载:服务器重启时,重新加载文件中的数据。

        流程:1)AOF持久化开启且存在AOF文件时,优先加载AOF文件。

                   2)AOF关闭或者AOF文件不存在时,加载RDB文件。

                   3)加载AOF/RDB文件成功后,Redis启动成功。

                   4)AOF/RDB文件存在错误时,Redis启动失败并打印错误信息。

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值