文章内容更新请以 WGrape GitHub博客 : parseAOF项目讲解之如何快速解析Redis的AOF文件 为准
前言
本文原创,著作权归WGrape所有,未经授权,严禁转载
目录
一、项目介绍
parseAOF 项目是一个用Go
和Shell
结合开发的一个快速解析AOF文件的工具,用于实现从AOF文件
到命令列表文件
的转换。使用简单,通过以下命令即可使用
bash ./start.sh /path/appendonly.aof
二、架构设计
1、切割文件
通过split
命令以字节数先将AOF文件切割成N份
虽然
split
命令支持行数、和字节数这两种切割文件的方式,但当行数超过万级以上时,以字节数切割的方式性能效率会明显更高
2、解析文件
当切割完文件后,会自动启动Go程序,以每个协程处理一个split file
的方式去解析内容,并生成对应的parsed file
默认的最大协程数为1024,也就是说只有当
split file
的数量低于1024个时,才能达到每个split file
都会有一个协程解析处理的情况
3、合并文件
当Go程序结束时,所有的split file
都已经被解析完毕,且都生成了对应的parsed file
,这时会再自动拼接所有的parsed file
生成一个merged file
三、解析原理
生成parsed file
文件的原理,是先用MatchLine()
函数一行一行解析AOF文件内容,最后再通过TranslateToPlainText()
函数转成纯文本,并写入parsed file
文件中
1、如果内容成功匹配 "^\\*\\d$" ,则此行内容是命令开始类型 ```MatchTypeCmdStart```
2、如果内容成功匹配 "^\\$\\d$" ,则此行内容是原生参数类型 ```MatchTypeArgRaw```