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

问:Redis如何做持久化

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

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

默认redis.conf 是关闭的

2c307382075c6a4746dbed90cdf8250e286.jpg227e3dfd8f80d8f3c55291c17c4eca8ed20.jpg 

always 总是写 

everysec 每秒写一次(最常用)

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

ps:保存配置 重启生效

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

原理如下:

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

重写也可以手动触发(和bgsave一样)使用bgrewrite 指令

 

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

2413a7f42701fcb660b94b30c851ee744bd.jpg

 

RDB和AOF的优缺点:

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

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

  • bgsave做镜像全量持久化,AOF做增量持久化(bgsave的时候耗时较长,不够实时,在停机的时候会导致大量丢失数据,所以需要aof来配合使用。在redis实例重启时,优先使用aof来恢复内存的状态,如果没有aof日志,就会使用rdb文件来恢复)

 

 

 

 

 

转载于:https://my.oschina.net/pentakill/blog/3048851

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值