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 源码记录_第1张图片

解析的堆栈流程

redis 源码记录_第2张图片

redis cmd

例如set zadd hget这些命令其实都存在于哈希里,简易的堆栈信息
redis 源码记录_第3张图片
一些基础的配置存放在sentinel.c这个文件下面

zadd

redis 源码记录_第4张图片

你可能感兴趣的:(redis,redis)