文章目录

  • 为什么日志是后写入
  • AOF三种落盘机制
    • 写后落盘
    • 一秒一写
    • 操作系统控制写回
  • AOF重写
  • AOF重写机制
  • AOF重写是会影响主线程的

为什么日志是后写入

因为日志没有语法检查,先写入日志,则可能写入错误命令。不利于redis使用日志恢复
后写入则是依靠redis执行,来保证命令的正确性

AOF三种落盘机制

写后落盘

redis执行完一条命令,写一次日志到磁盘中
写的操作阻塞线程,影响后续redis执行命令
效率:低
宕机 有可能丢失一条记录

一秒一写

redis执行完一条命令后,将命令写入AOF内存缓冲区
每隔一秒将缓冲区内容写入磁盘(异步)
效率:中
宕机 有可能丢失一秒内的日志

操作系统控制写回

redis执行完一条命令后,将命令写入AOF内存缓冲区
由操作系统控制何时写到磁盘中去(异步)
效率:高
宕机 有可能丢失大量日志

AOF重写

AOF重写的作用就是忽略过程,注重结果(反正我没事务)
假设我有个记录A,被100个命令修改了一百次,最后的结果是100
此时AOF记录就有100条,但是重写后就只有一条
即 A = 100
AOF重写减小日志大小
大文件是文件操作系统所不允许的
大文件的日志会影响写入速度
大文件的日志会影响redis的恢复速度

AOF重写机制

主线程fork出bgrewriteaof子进程
bgrewriteaof中拷贝redis内存数据
bgrewriteaof中的线程将reids内存数据 + AOF重写缓冲区数据 组成新的AOF 来替换旧的AOF
在AOF重写过程中,旧的AOF依旧在正常写入,来应对重写未完成时的宕机问题

AOF重写是会影响主线程的

1.在子进程拷贝数据时会阻塞主线程
2.在主线程操作已有数据时,也会阻塞
父子进程拷贝数据使用的是写时复制
子进程中只拷贝必要的数据结构
子进程和父进程指向相同的内存空间
当父进程进行写的操作时,才会分配新的内存地址,将数据拷贝进去

Redis AOF日志相关推荐

  1. redis aof日志持久化和key设计原则

    一.aof的配置         1.将appendonly改为yes开启aof功能 2.appendfsync:选择同步的方式 3. 二.key的设计原则 1.sinter [key:value]. ...

  2. redis 通过aof日志恢复_宕机了,宕机了,Redis数据丢了怎么办?

    前言 Redis作为内存型的数据库,虽然很快,依然有着很大的隐患,一旦「服务器宕机」重启,内存中数据还会存在吗? 很容易想到的一个方案是从后台数据恢复这些数据,如果数据量很小,这倒是一个可行的方案.但 ...

  3. 03 | AOF 日志:宕机了, Redis 如何避免数据丢失?

    文章目录 1. AOF日志是如何实现的 2. 三种写回策略 3. 日志文件太大了怎么办 4. AOF重写会阻塞吗? 1. AOF日志是如何实现的 AOF 日志是写后日志,"写后"的 ...

  4. Redis的AOF日志

    如果 Redis 每执行一条写操作命令,就把该命令以追加的方式写入到一个文件里,然后重启 Redis 的时候,先去读取这个文件里的命令,并且执行它,这不就相当于恢复了缓存数据了吗? 这种保存写操作命令 ...

  5. redis快照持久化和aof日志持久化

    持久化就是即使断电/重启需要存储的数据不会丢失,即将数据存储在设备中,一般存在硬盘内 redis的持久化有2种方式 :1-rdb快照  2-aof日志,可以通过配置redis.conf文件进行配置 r ...

  6. redis 通过aof日志恢复_Redis从入门到精通(四、Redis的持久化和数据备份与恢复)

    本文将对Redis的两种持久化方式做详细的介绍,从配置,机制,优缺点几方面讲起 Redis持久化简介 Redis提供了两种持久化的选项,一种是快照文件(snapshotting,RDB),它会基于某个 ...

  7. Redis进阶学习--02| AOF日志:宕机了,Redis如何避免数据丢失?

    二.AOF日志:宕机了,Redis如何避免数据丢失? 一.AOF 日志是如何实现的(Redis是追求速率优先的设计,先执行命令,后写入日志(磁盘)) AOF日志与Redis命令执行的顺序是先执行命令写 ...

  8. Redis: 一文带你了解AOF日志

    Redis: 一文带你了解AOF日志 AOF日志 AOF的内容 AOF持久化的实现 AOF数据恢复 为什么AOF先执行命令后写日志? 写回策略 AOF重写机制 参考文献 Redis用作缓存,直接从内存 ...

  9. AOF日志:宕机了,Redis如何避免数据丢失?

    你会把 Redis 用在什么业务场景下? 我想你大概率会说: "我会把它当作缓存使用,因为它把后端数据库中的数据存储在内存中,然后直接从内存中读取数据,响应速度会非常快. "没错, ...

最新文章

  1. Servlet、MySQL中文乱码
  2. python 爬取svg数据_python处理svg数据
  3. 在Ubuntu 14.04 64bit上安装字体管理器font-manager
  4. 京东数科业务架构全披露,陈生强发布城市操作系统和京东钼媒
  5. Object or Function-JS 中的鸡与蛋问题
  6. linux /dev/snd,linux – / dev / tcp去了哪里?
  7. 一个页面标题和过滤输出的解决方案(下)
  8. macbookpro升级后打不开eclipse_维修分享——面容坏升级iOS13系统后 导致前后摄像头都打不开...
  9. android timer后函数继续执行_一切从android的handler说起(三)
  10. 操作系统系列「一」OPERATING SYSTEMS THREE EASY PIECES 《操作系统导论》
  11. HtmlAgilityPack 使用
  12. idea 远程调试_我的天!你竟然不会用IDEA远程调试Tomcat...
  13. linux let s证书续期,BT(宝塔面板)Let’s Encrypt证书续签方法
  14. 百度自动驾驶出租车服务在北京开放:无需预约免费试乘
  15. ibm linux mq 发送消息_IBM MQ简明教程——2. 将消息发送至远程队列
  16. 客户端无法远程连接服务器的问题
  17. 长尾关键词是什么意思?如何使用5118挖掘和下载长尾词?
  18. RAM Parity 和 RAM ECC
  19. C语言---1 C语言认知
  20. domian shift

热门文章

  1. 大年初七,小灰在西双版纳看人妖
  2. Tcl 语言—— 文本操作篇
  3. HC32F460 QSPI底层驱动(W25Q128)
  4. 更改linux登陆界面的图片,Ubuntu更改登录界面的图片
  5. 为什么用分流器(小型交换机)将一根网线分为分为两根后能够产生两个ip地址?
  6. 第一天(倒数79天)
  7. ORACLE下存储过程返回查询结果
  8. 数据分箱5——Best-KS(Kolmogorov-Smirnov)分箱(有监督)
  9. 隐藏滚动条适用于各个浏览器
  10. 一屋不扫何以扫天下?