解剖AOF日志【打卡学废Redis】


在这里插入图片描述
“我发明了一句话,我说人的收入,是跟自己的不可替代性成正比的,你越不可代替你的收入越高,你越可以被替代,你的收入越低”——白岩松


AOF是Redis持久化机制之一,采用写后日志的方式来保存日志,通过Always、Everysec、No三种写回策略来减少数据丢失的风险,通过重写机制提高写入效率和实现快速恢复数据。


一. 写后日志

名称概念优势风险
写前日志先将数据记录到日志,再写入内存便于故障时恢复数据
写后日志先执行命令将数据写入内存,再记录日志确保了只会记录正确的命令;不会阻塞当前的写操作宕机可能丢失数据;可能会阻塞下一个操作
  1. AOF为什么采用写后日志?
    在这里插入图片描述
    AOF存的是命令,不是数据!故先执行命令,可保证存入到AOF日志的命令都是正确的!

  2. 写后日志有哪些风险?
    执行完命令到将命令存入AOF日志是有时间差的,哪怕是0.0…001ms都是时间差!在此期间,机器宕机了,这期间的数据是不是就丢失了!!!
    执行命令和存入AOF日志都是通过主线程来操作的,当写入磁盘很慢时,造成当前操作阻塞,那么后续的操作也就会面临阻塞风险!!!

  3. 如何规避写后日志带来的风险?
    写回策略+重写机制


二. 写回策略

写回策略概念
Always同步写回:命令执行成功,便即刻写入磁盘数据丢失的可能性极底性能差
Everysec每秒写回:命令执行成功,先写到内存缓冲区,再间隔一秒写到磁盘一次性能适中可能丢失
No操作系统控制的写回:命令执行成功,先写到内存缓冲区,由操作系统决定写到磁盘的时间性能好数据丢失的可能性大

写回策略解决了什么问题?

  1. 志在避免数据丢失和写入磁盘影响性能之间做取舍的策略。

三. 重写机制

  1. 重写机制解决了什么问题?
    a. 随着写入AOF日志的命令越来越多,日志文件越来越大,导致写入效率变低!
    b. 日志文件太大,不利于数据恢复!
    ps:电脑打开一个有几十万数据的excel,是不是很卡?这就是文件太大了,严重影响了机器的性能!

  2. 重写机制是怎么解决问题的?
    终极答案:将大文件变成小文件
    a. 解决思路🤔
    在这里插入图片描述

    明确一点:再提醒一次,AOF日志存的是命令!不是数据!
    类比一哈:执行了10万次增/删/改/查的SQL语句,数据库的数据条数必然小于等于10万条,Redis的命令也是一样的,执行了10万条命令,也许数据库就只有5万条命令!
    一夫一妻:一夫多妻或一妻多夫在中国都是不合法的!所以尼,通过数据库当前 的状态去生成新的命令,不就变成了一对一了吗?重写后的AOF日志对比当前的AOF日志不就变小了吗?

    b. 疑问🤔️

    • AOF重写会不会阻塞?
      不会阻塞哦!每次重写时,主线程会fork出后台的bgrewriteaof子进程,子进程会拷贝父进程的页表,将页表的数据变成命令,并记录到新的AOF日志中。
    • AOF重写时,新来的命令怎么办?
      父进程会将新来的命令写到两个缓冲区,一个是当前日志对应的缓冲区,另一个是重写AOF日志对应的缓冲区

参考蒋德钧老师的《Redis核心技术与实战》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值