parseAOF项目讲解之如何快速解析Redis的AOF文件

Posted by WGrape的博客 on December 7, 2021

文章内容更新请以 WGrape GitHub博客 : parseAOF项目讲解之如何快速解析Redis的AOF文件 为准

前言

本文原创,著作权归WGrape所有,未经授权,严禁转载

目录

一、项目介绍

intro

parseAOF 项目是一个用GoShell结合开发的一个快速解析AOF文件的工具,用于实现从AOF文件命令列表文件的转换。使用简单,通过以下命令即可使用

bash ./start.sh /path/appendonly.aof

二、架构设计

image

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

生成parsed file文件的原理,是先用MatchLine()函数一行一行解析AOF文件内容,最后再通过TranslateToPlainText()函数转成纯文本,并写入parsed file文件中

1、如果内容成功匹配 "^\\*\\d$" ,则此行内容是命令开始类型 ```MatchTypeCmdStart```
2、如果内容成功匹配 "^\\$\\d$" ,则此行内容是原生参数类型 ```MatchTypeArgRaw```