redis 源码记录

正好最近时间富裕,看一看redis源码,简单的记录一下。也有可能说的是不全面的,自行斟酌,只能通过debug来简单的梳理本次测试流程,而不是全量的覆盖的所有测试用例,时不时更新,争取一天学一点点。

redis版本

6.27

流程图

在这里插入图片描述

如何调试?

我个人推荐使用clion来远程一台linux远程主机,我是很喜欢jetbrains全家桶的,远程调试go、python也是用的jetbrains编辑器。写unity C#的代码也用的是他家的rider。这篇讲解就很全了,其他远程调试也可以参考这个配,一个原理的配置链接

set 的简单尝试

当我们在redis-cli中输入set name:181:5720182219 dxgzg:5720182219,redis收到的其实是"*3\r\n$3\r\nset\r\n$19\r\nname:181:5720182219\r\n$16\r\ndxgzg:5720182219\r\n"。然后通过client这个结构体来进行解析。第一个三表示这行有三段,后面的$3表示有3个字符也就是set,$19表示的是后面有19个字符串,$16同理的,这样就构成的三个字段。processInputBuffer在这个函数解析的。

typedef struct client {
	int multibulklen;       // 就是上述的*3中的3,表示有三个字段 set key value
    long bulklen;           // 后面$的数字,指的是这段的长度,set自然就是3,依次类推
	
	robj **argv;  // 解析完的bulk存储在这里
	 struct redisCommand *cmd, *lastcmd;  // cmd为本次的操作,这里为set
}

processMultibulkBuffer

主要是processMultibulkBuffer这个函数进行的数据构建,将命令行的数据存放到client中的argv

lookupCommand

lookupCommand用来设置client中的cmd

flushAppendOnlyFile

如果开启了AOF,输出到AOF文件中。server.c:2449行。明天看一下读盘的情况

handleClientsWithPendingWritesUsingThreads

将操作返回结果返回给客户端

打印字符串数组

我还是觉得转成指针打印比较方便
在这里插入图片描述

解析的堆栈流程

在这里插入图片描述

redis cmd

例如set zadd hget这些命令其实都存在于哈希里,简易的堆栈信息
在这里插入图片描述
一些基础的配置存放在sentinel.c这个文件下面

zadd

在这里插入图片描述

开启混合模式的话格式是怎么样的?

混合模式的话,文件是会放在aof文件中的,rdb在头,aof在尾巴存储,可以看这个字段aof-use-rdb-preamble的介绍,改为yes就是开启混合模式了
在这里插入图片描述
没有aof文件的话看看是不是这个配置没打开
在这里插入图片描述
BGREWRITEAOF,可以使用这个指令来重写一份aof文件,就可以看见rdb数据段了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值