随笔分类 -  redis源码阅读

记录自己阅读redis源码的过程
摘要:在sds.h中,定义sds为char* 类型 typedef char *sds; 然后就是 sdshdr5/8/16/32/64。的5种结构体,这五种都是使用了 __attribute__ ((__packed__))来进行手动内存对齐。 此外,sdshdr5从来没有使用过,只在内部使用flag位 阅读全文
posted @ 2024-02-09 21:49 拿什么救赎 阅读(10) 评论(0) 推荐(0) 编辑
摘要:redis通讯协议是基于RESP来实现的。由于redis过于优秀,所以很多公司内部的私有缓存也会去兼容RESP协议。 RESP本质是一种文本协议。也就是说,你直接抓包,是能看见明文的。 抓包命令: 因为我客户端和服务器是同一台,所以走的是环回口。 tcpdump -i lo port 7000 -A 阅读全文
posted @ 2023-07-12 23:22 拿什么救赎 阅读(71) 评论(0) 推荐(0) 编辑
摘要:客户端结构体用来存储client端连接的所有信息。 typedef struct client { uint64_t id; /* Client incremental unique ID. */ connection *conn; int resp; /* RESP protocol versio 阅读全文
posted @ 2022-07-12 16:39 拿什么救赎 阅读(88) 评论(0) 推荐(0) 编辑
摘要:1.对象结构体robj typedef struct redisObject { unsigned type:4; unsigned encoding:4; unsigned lru:LRU_BITS; /* LRU time (relative to global lru_clock) or * 阅读全文
posted @ 2022-07-11 23:45 拿什么救赎 阅读(129) 评论(0) 推荐(0) 编辑
摘要:本篇文章,想主要研究下beforesleep和aftersleep两个阶段redis究竟干了什么。 aftersleep只是处理module,可以忽略。 主要研究beforesleep。 1.刷新zmalloc_used变量和server.stat_peak_memory变量。很简单,就是当前的us 阅读全文
posted @ 2022-06-08 22:57 拿什么救赎 阅读(340) 评论(0) 推荐(0) 编辑
摘要:本来这章的标题是想写string类型的操作的。 但为什么改成SDS了哪? 因为我之前粗俗的认为redis只有string类型有用到SDS。但是在写这篇博客之前,稍微翻了下其他地方的源码,发现redis用到SDS的地方实际上是很多的。 所以将SDS认为只是string类型的底层结构其实是狭隘的。 所以 阅读全文
posted @ 2022-05-19 00:13 拿什么救赎 阅读(70) 评论(0) 推荐(0) 编辑
摘要:本章主要讨论在client连接到server时。server在ae过程中是如何处理的。 主要讨论的是接口函数。 大家可以把断点打在networking/acceptTcpHandler()下 以上函数在ae.c下如下部分调用: if (!invert && fe->mask & mask & AE_ 阅读全文
posted @ 2022-04-19 23:54 拿什么救赎 阅读(49) 评论(0) 推荐(0) 编辑
摘要:书接上回,redis进入ae事件监听了。 相关的c文件都以ae开头,比如ae.c ae_epoll.c ae_ecport.c ae_select.c ae_kqueue.c ae相关的结构体在server.h的redisServer下的aeEventLoop结构体(eventloop)。 /* S 阅读全文
posted @ 2022-04-12 23:58 拿什么救赎 阅读(291) 评论(0) 推荐(0) 编辑
摘要:redis版本:6.2.6 为了调试方便,配置文件绝大部分保持一致,只修改如下: daemonize no。 关闭后台运行。这会影响debug,因为在server.c/6312行会进入daemonize(),然后执行setsid(),这样会导致debug退出。 然后将断点打在server.c/615 阅读全文
posted @ 2022-04-10 00:59 拿什么救赎 阅读(148) 评论(0) 推荐(0) 编辑
摘要:最近在学习redis的源码。在网上看了很多相关环境搭建。发现用的都是JetBrains的Clion。vs code相关的资料很少。 所以在此介绍一下如何用vscode 搭建redis debug环境。 一.linux配置: 很简单。把redis的源码包放在你想放的文件目录下就行了。git clone 阅读全文
posted @ 2022-04-05 21:27 拿什么救赎 阅读(213) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示