每日一句
不要轻易去依赖一个人,它会成为你的习惯,当分别来临,你失去的不是某个人,而是你精神的支柱。无论何时何地,都要学会独立行走,它会让你走得更坦然些。
前提介绍
为了保证缓存数据的完整性和可靠性,Redis 提供两种持久化机制:
-
RDB: 将数据库的快照以二进制的方式保存到磁盘;
-
AOF: 将所有写入命令及相关参数以协议文本的方式写入文件并持久保存磁盘;
本文只关心 AOF,Redis Server 将所有写入的命令转换成 RESP 协议文本的方式写入 AOF 文件。
AOF 的实现
Redis 的 AOF 是类似于 log 的机制,每次写操作都会写到硬盘上,当系统崩溃时,可以通过 AOF 来恢复数据。每个带有写操作的命令被 Redis 服务器端收到运行时,该命令都会被记录到 AOF 文件上。由于只是一个 append 到文件操作,所以写到硬盘上的操作往往非常快。
其实 Redis AOF 机制包括了两件事, Rewrite 和 AOF,因为 AOF 主要采用的方式属于 Append Of File 的方式追加是文档存储, 本质内容暂时不考虑,本章重点内容是 Rewrite 机制 。
AOF 执行案例
Redis Server 收到 set key value 的的写入命令,Redis server 会进行以下几步操作:
- 将命令转换成协议文本,转换后的结果:
<code data-type="codeline">*3</code><code data-type="codeline">$3</code><code data-type="codeline">SET</code><code data-type="codeline">$3</code><code data-type="codeline">KEY</code><code data-type="codeline">$5</code><code data-type="codeline">VALUE</code>