更新时间:2021-11-09 10:14:52
Redis提供了两种不同的持久化模式:
AOF文件记录的是原始的Redis写请求命令,所以在了解AOF文件之前我们需要了解下Redis协议。
Redis客户端和服务端之间可以通过RESP (REdis Serialization Protocol)来进行通信,作者在设计这个协议主要依据了以下三点:
RESP协议主要由以下几种数据类型组成:简单字符串、错误信息、整数、字符串、数组。客户端发送给服务端的是一个数组命令,服务端根据不同命令的实现进行回复。每个数据类型的定义如下:
对于Redis的请求客户端以RESP协议的形式发送过来,Redis后端执行完命令之后如果打开了aof文件记录Redis会讲该请求记录到AOF文件中。
在日常开发测试中,有时候为了方便查看历史的命令记录我们需要对AOF文件进行解析,这样可以方便我们查看对某个Key的记录。这里我们通过Python代码调用hiredis库来进行Redis AOF文件的解析,代码如下:
#!/usr/bin/env python
""" A redis appendonly file parser
"""
import logging
import hiredis
import sys
if len(sys.argv) != 2:
print sys.argv[0], 'aof_file'
sys.exit()
file = open(sys.argv[1])
line = file.readline()
cur_request = line
while line:
req_reader = hiredis.Reader()
req_reader.setmaxbuf(0)
req_reader.feed(cur_request)
command = req_reader.gets()
try:
if command is not False:
print command
cur_request = ''
except hiredis.ProtocolError:
print 'protocol error'
line = file.readline()
cur_request += line
file.close
使用以上脚本解析一个aof文件结果如下,得到如下结果之后用户就可以很方便的查看一个Key相关的操作了。
['PEXPIREAT', 'RedisTestLog', '1479541381558']
['SET', 'RedisTestLog', '39124268']
['PEXPIREAT', 'RedisTestLog', '1479973381559']
['HSET', 'RedisTestLogHash', 'RedisHashField', '16']
['PEXPIREAT', 'RedisTestLogHash', '1479973381561']
['SET', 'RedisTestLogString', '79146']