共计 1833 个字符,预计需要花费 5 分钟才能阅读完成。
今天就跟大家聊聊有关 aof 日志文件的用处有哪些,可能很多人都不太了解,为了让大家更加了解,丸趣 TV 小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
在 Redis 配置文件中有一个叫 appendonly 的选项, 可以写 yes 或 no. 这个选项就是负责是否开启 AOF 日志的开关.AOF 日志, 你可以简单理解为 MySQL binlog 一样的东西, 作用就是记录每次的写操作, 在遇到断电等问题时可以用它来恢复数据库状态. 但是他不是 bin 的, 而是 text 的. 一行一行, 写得很规范. 如果你是一台 redis, 那你也能人肉通过它恢复数据。下面丸趣 TV 丸趣 TV 小编来讲解下 aof(append only file) 日志文件有哪些用处?
aof(append only file) 日志文件有哪些用处
Redis 有三种类型的落地文件:
数据文件 - 在配置中可设置其位置及文件名, 默认文件名 dump.rdb
日志文件 - 在配置中也可以配置. 当然, 在你是以 daemon 方式运行的时候, 这个值就不要设置为 stdout 了, 这么设置会自动被换成 /dev/null
AOF 文件 - 也就是我们这篇文章的主角, 他的作用是用于数据恢复. 他除了设置是否开启外, 还可以设置开启后以何种方式写日志. 这个何种一共是三种,1 是每次写操作都保证将 fsync() 来完成的,2 是每秒调用一次 fsync(),3 是从不调用, 让操作系统自己来同步. 当然, 设置为不同, 效率会不同, 你的数据损失风险也不同.
运行流程
既然是 log 文件, 而且是要用于恢复的, 那么我们动动脚趾都能想到, 这玩意肯定会越来越大, 不管你的应用是大是小, 如果 AOF 文件只增不减的话, 那文件将会无限长大, 这个问题是所有 binlog 都会遇到的. 而通常遇到这种问题都会有一个 rotate 方案. 就是当日志达到一定大小或者每隔一段时间将日志写到新的一个文件中, 旧日志文件可以用来备份或其它.
而 Redis 的 AOF 还和 rotate 略有不同, 他用了一种比较简单的方法, 就是先给当前的所有数据做一个快照. 然后再在这个快照的基础上写接下来的日志.
照快照的好处是, 你之前可能用了 10w 次操作共改变了 100 条数据 (比如在一条数据上进行了多次操作). 那这时你 AOF 中的 10w 条写操作记录就变成了 100 条记录. 相当于将前面的执行全部合并了. 原本很大 AOF 变小了.
执行这个操作的命令是:BGREWRITEAOF (background rewrite append only file)
这个快照长什么样呢? 基本和一般的写日志没什么两样, 也是一条一条的写记录.. 比如现在 Redis 中总共存了 3 条 string 类型的数据 a = 1,b= 2,c= 3. 那这个快照的基本内容就是写入 a = 1, 写入 b = 2, 写入 c = 3.
这时候要用 AOF 进行恢复的时候, 只要先执行了前面几条, 就能够恢复当前状态, 然后再执行之后来的写操作, 就能完全重现数据了.
aof(append only file) 日志文件有哪些用处
内部实现
我们大概知道了执行 BGREWRITEAOF 时都发生了什么, 下面来说一下 Redis 是如何实现的. 分下面几步:
fork! Redis 通过 fork 产生子进程.
子进程对当前数据执行遍历操作, 将当前所有数据都生成一条写入日志, 将这些日志写入一个临时文件.(其实是子进程写了一个临时文件, 又再 rename 成了另一个临时文件)
父子进程是并行执行的, 在子进程遍历并写临时文件的时候, 父进程在照常接收请求, 处理请求, 写 AOF, 不过这时他是把新来的 AOF 写在一个缓冲区中.
当子进程完成遍历操作, 写完临时文件后, 就会退出. 这时父进程的 wait3 函数会接收到子进程退出的消息, 他会把自己现在收集在缓冲区中的所有 AOF 追加在临时文件中.
最后一步, 把临时文件 rename 一下, 改名为 appendonly.aof, 这时原来的 aof 文件被覆盖. 整个过程完成.
如果你的 AOF 文件稍微大点, 你可以在一个终端执行 BGREWRITEAOF, 然后立刻 ls 连着查看几次 redis 的 data 目录, 就可以看到, 先生成了一个临时文件, 临时文件比原来的 appendonly.aof 小一些, 然后临时文件消失, 而原来的 appendonly.aof 变小了, 其实就是临时文件 rename 成了 appendonly.aof.. 覆盖了原来的大文件. 看起来像是临时文件消失了。
看完上述内容,你们对 aof 日志文件的用处有哪些有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注丸趣 TV 行业资讯频道,感谢大家的支持。