Redis源码分析(十二)--- redis-check-dump本地数据库检测

本文详细探讨了Redis的源码分析,重点关注了redis-check-dump工具的功能,该工具主要负责对本地数据库进行检测,尤其是对key进行检查。通过对700多行代码的研究,文章揭示了该工具的核心过程——process()方法,揭示了Redis数据库检测的关键细节。
摘要由CSDN通过智能技术生成

       这个文件我在今天分析学习的时候,一直有种似懂非懂的感觉,代码量700+的代码,最后开放给系统的就是一个process()方法。这里说的说的数据库检测,是针对key的检测,会用到,下面提到的结构体:

/* Data type to hold opcode with optional key name an success status */
/* 用于key的检测时使用,后续检测操作都用到了entry结构体 */
typedef struct {
	//key的名字
    char* key;
    //类型
    int type;
    //是否是成功状态
    char success;
} entry;

后续所涉及到的很多API都是与这个结构体相关,此代码最终检测的其实是一个叫dump.rdb的文件,在检测的后面还会加上循环冗余校验CRC64。下面亮出API:

int checkType(unsigned char t) /* 每当添加一个新的obj类型时,都要检测这个类型是否合理 */
int readBytes(void *target, long num) /* 在当前文件偏移量位置往后读取num个字节位置 */
int processHeader(void) /* 读取快照文件的头部,检测头部名称或版本号是否正确 */
int loadType(entry *e) /* 为entry赋上obj的Type */
int peekType() /* 弹出版本号 */
int processTime(int type) /* 去除用来表示时间的字节 */
uint32_t loadLength(int *isencoded) /* 分type读取长度 */
char *loadIntegerObject(int enctype) /* 根据当前整型的编码方式,获取数值,以字符形式返回 */
char* loadLzfStringObject() /* 获得解压后的字符串 */
char* loadStringObject() /* 获取当前文件信息字符串对象 */
int processStringObject(char** store) /* 将字符串对象赋给所传入的参数 */
double* loadDoubleValue() /* 文件中读取double类型值 */
int processDoubleValue(double** store) /* 对double类型进行赋予给参数 */
int loadPair(entry *e) /* 读取键值对 */
entry loadEntry() /* 获取entry的key结构体 */
void printCentered(int indent, int width, char* body) /* 输出界面对称的信息 */
void printValid(uint64_t ops, uint64_t bytes) /* 输出有效信息 */
void printSkipped(uint64_t bytes, uint64_t offset) /* 输出Skipped跳过bytes字节信息 */
void printErrorStack(entry *e) /* 输出错误栈的信息 */
void process(void) /* process方法是执行检测的主要方法 */

方法里面好多loadXXX()方法,这几个load方法的确比较有用,在这个检测文件中,编写者又很人性化的构造了error的结构体,用于模拟错误信息栈的输出。

/* Hold a stack of errors */
/* 错误信息结构体 */
typedef struct {
	//具体的错误信息字符串
    char error[16][1024];
    //内部偏移量
    size_t offset[16];
    //错误信息等级
    size_t level;
} errors_t;
static errors_t errors;

不同的level等级对应不同的出错信息。在API里有个比较关键的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值