Redis 面试知识点笔记(六)Redis如何作持久化

问:Redis如何作持久化redis

AOF (Append-Only-File) 持久化:保持写状态数据库

  • 记录下除了查询之外的全部变动数据库状态的指令
  • 以append的形式追加保存到aof文件中

默认redis.conf 是关闭的app

 

always 老是写 操作系统

everysec 每秒写一次(最经常使用)3d

no 将写入操做交给操做系统决定,操做系统通常等到缓冲区满了才写入磁盘日志

ps:保存配置 重启生效blog

问:日志重写解决AOF文件大小不断增大的问题?进程

原理以下:内存

  • 调用fork(),建立一个子进程
  • 子进程把新的AOF写到一个临时文件里,不依赖原来的AOF文件
  • 主进程持续将新的变更同时写到内存和原来的AOF里
  • 主进程获取子进程重写AOF的完成信号,往新AOF同步增量变更
  • 使用新的AOF文件替换掉旧的AOF文件

重写也能够手动触发(和bgsave同样)使用bgrewrite 指令同步

 

RDB和AOF文件共存状况下的恢复流程:

 

RDB和AOF的优缺点:

  • RDB优势:全量数据快照(二进制文件),文件小,恢复快
  • RDB缺点:没法保存最近一次快照以后的增量数据
  • AOF优势:可读性高,适合保存增量数据,数据不易丢失(刷盘是由appendfsync控制)
  • AOF缺点:文件体积大,恢复时间长(人类可读的文本体积大,重启时指令回放,使用rewirte防止磁盘空间被撑满)

RDB-AOF混合持久化模式(redis 4.0以后支持,默认配置)

  • bgsave作镜像全量持久化,AOF作增量持久化(bgsave的时候耗时较长,不够实时,在停机的时候会致使大量丢失数据,因此须要aof来配合使用。在redis实例重启时,优先使用aof来恢复内存的状态,若是没有aof日志,就会使用rdb文件来恢复)
相关文章
相关标签/搜索