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

蹲街弑〆低调 提交于 2020-03-02 06:51:08

问:Redis如何做持久化

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

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

默认redis.conf 是关闭的

 

always 总是写 

everysec 每秒写一次(最常用)

no 将写入操作交给操作系统决定,操作系统一般等到缓冲区满了才写入磁盘

ps:保存配置 重启生效

问:日志重写解决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文件来恢复)

 

 

 

 

 

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