Redis持久化--RDB和AOF

萝らか妹 提交于 2020-03-03 11:51:20

RDB:

      RDB持久化是把当前进程数据生成快照保存到硬盘的过程,Redis 默认的方式。

  触发机制:

      1)save命令: 阻塞当前Redis服务器, 直到RDB过程完成为止。
                              对于内存比较大的实例会造成长时间阻塞, 线上环境不建议使用。
      2)bgsave命令: Redis进程执行fork操作创建子进程, RDB持久化过程由子进程负责, 完成后自动结束。
                                  阻塞只发生在fork阶段, 一般时间很短。持久化过程,主线程还可以执行命令
      bgsave流程:

      3)自动触发: redis.conf中配置:

save 900 1
save 300 10
save 60 10000
##900s 内更改一次,就储存; 300s 内更改了 10 次就储存

      其他自动触发情况:
            主从复制时,全量复制操作时
            执行shutdown命令时,如果没有开启AOF持久化功能则自动执行bgsave
            执行debug reload命令重新加载Redis时, 也会自动触发save操作
      二者区别

  RDB优缺点:

      优点:RDB是一个紧凑压缩的二进制文件,压缩后的文件远远小于内存大小。
                Redis加载RDB恢复数据远远快于AOF的方式。
      缺点:耗时、耗性能 - - bgsave每次运行都要执行fork操作创建子进程, 属于重量级操作, 频繁执行成本过高
                 RDB不适合实时持久化。

AOF:

      Redis持久化的主流方式,主要解决了数据持久化的实时性。
      AOF配置: 配置redis.conf

appendonly yes       //默认no,不开启AOF
appendfilename       //aof文件名,
dir ./                         //aof文件目录
appendfsync           //同步策略

      AOF工作流程:

          写入缓冲区的原因:  保证写入速度(如果直接追加到硬盘, 那么性能完全取决于当前硬盘负载)

                                     Redis可以提供多种缓冲区同步硬盘的策略, 在性能和安全性方面做出平衡

     AOF缓冲区同步文件策略:
          always:    每次写入缓冲区的命令都调用fsync操作同步到AOF文件。
          no:            不对AOF文件做fsync同步操作
          everysec:  Redis使用另一条线程每秒执行fsync同步操作,常用的同步硬盘的策略
     AOF重写作用:
          减少磁盘占用量、加速恢复速度

RDB与AOF:

参考:
     有空还是看《Redis开发与运维》第5章吧

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!