当前位置:首页 > 问答 > 正文

Redis里怎么查看AOF日志持久化情况,弄明白它到底存了啥东西

要弄清楚Redis的AOF(Append Only File)日志里存了什么,首先得知道怎么找到它、怎么查看它,以及如何理解里面的内容,这部分内容主要参考了Redis官方文档中关于持久化的章节,以及常见的Redis运维实践。

找到AOF文件

你需要知道AOF文件在哪里,这个文件默认的名字是 appendonly.aof,但它的具体存放位置取决于你的Redis配置。

  1. 查看Redis配置文件:最直接的方法是查看Redis的配置文件,通常是 redis.conf,你可以用文本编辑器打开这个文件。

    • 在配置文件里,搜索 dir 这个关键字,这一行指定了Redis工作目录,AOF文件和RDB快照文件都会保存在这个目录下,比如你看到 dir /var/lib/redis,那么AOF文件很可能就在 /var/lib/redis 这个文件夹里。
    • 搜索 appendfilename 这个关键字,这一行直接定义了AOF文件的名称,默认就是 appendonly.aof
    • 确保AOF功能是开启的,搜索 appendonly,如果它的值是 yes,则表示AOF持久化已启用;如果是 no,则表示未启用,那么你可能就找不到AOF文件,或者找到的文件是旧的。
  2. 通过Redis命令行查询:如果你已经连接到了Redis服务器,可以直接通过命令来查询,这样更快捷。

    • 使用 CONFIG GET dir 命令,可以获取当前服务器配置的工作目录。
    • 使用 CONFIG GET appendfilename 命令,可以获取AOF文件的名称。
    • 使用 CONFIG GET appendonly 命令,可以查看AOF功能是否开启。

dirappendfilename 的结果拼凑起来,就是AOF文件的完整路径了。

查看AOF文件的内容

找到了 appendonly.aof 文件后,怎么看里面的东西呢?重要警告:绝对不要在你正在运行的Redis服务上直接用编辑器打开并修改AOF文件! 这极有可能损坏文件,导致Redis无法启动,正确的做法是拷贝一份副本,或者使用专门的工具来查看。

  1. 直接使用文本查看工具(如cat, less, more):AOF文件本质上是一个纯文本文件,你可以用Linux下的 catlessmore 命令来直接查看它的内容,这是最直观的方法。

    • 在终端里输入:less /var/lib/redis/appendonly.aof
  2. 使用Redis自带的校验工具(redis-check-aof):Redis安装时通常会附带一个叫 redis-check-aof 的工具,这个工具的本意是用来修复损坏的AOF文件,但它也提供一个 --fix 以外的模式,可以以更清晰的方式展示文件内容,虽然主要还是用于检查。

理解AOF文件里“存了啥东西”

当你打开AOF文件,你会看到里面既有一些看起来是配置的语句,也有一长串看起来有点奇怪的命令,AOF文件的核心原理,用最简单的话说就是:它记录了你对Redis数据库进行修改的所有写命令(比如SET, LPUSH, SADD, ZADD, DEL等),并按顺序保存下来。

可以分为几个部分:

  1. 文件头:文件开头可能是一些以 开头的注释行,用来表明AOF文件的版本、Redis的版本等信息,这些信息对Redis重启时正确解析文件有帮助。

  2. Redis协议格式的命令:这是AOF文件的主体内容,它并不是直接记录你输入的简单命令,而是使用了一种叫“Redis序列化协议(RESP)”的格式来存储,这解释了为什么内容看起来有点“怪”。

    • 举个例子,如果你在Redis客户端里输入了命令:SET mykey "Hello World"
    • 那么在AOF文件里,它可能会被记录为(一种简化理解的表现形式):
      *3
      $3
      SET
      $5
      mykey
      $11
      Hello World
    • 我们来拆解一下这个“密码”:
      • *3 表示这个命令总共有3个部分(或参数)。
      • $3 表示紧接着的下一个部分有3个字符,即 SET
      • $5 表示下一个部分有5个字符,即 mykey
      • $11 表示下一个部分有11个字符,即 Hello World
    • AOF文件就是用这种格式,把你执行的每一个写命令都“翻译”并记录下来,你执行的LPUSH、HSET等所有修改数据的命令,都会以这种形式追加到文件末尾。
  3. 文件重写:你可能会想,如果服务器运行了很久,AOF文件岂不是会非常大?是的,所以Redis提供了一个“AOF重写”机制,它会基于当前数据库的内存状态,重新生成一个全新的、更小的AOF文件,这个新文件里包含的命令集合,是能达到当前数据状态的最精简命令序列,如果你对一个key先后SET了10次,旧AOF文件里有10条SET命令,但重写后的新文件里只会保留最后一条有效的SET命令,你可以手动执行 BGREWRITEAOF 命令来触发重写,也可以配置策略让Redis自动执行。

总结一下

查看Redis AOF日志,就是去找到 appendonly.aof 这个文件,然后用安全的文本查看工具打开它,里面存的东西,本质上就是你自开启AOF功能以来,所有对数据进行过修改的命令历史记录,只不过这些命令是用Redis的一种特定格式(RESP)编码的,通过阅读这些命令,你就能清晰地知道数据是如何一步步变成当前状态的,这也就是AOF持久化的核心——通过重放命令来恢复数据。

Redis里怎么查看AOF日志持久化情况,弄明白它到底存了啥东西