redis
文章平均质量分 60
欢谷悠扬
这世上有一种英雄主义,那就是看清了生活的真相,依然热爱生活
展开
-
redis源码之set命令解析(8)
1.背景源码是redis5版本,在笔记7中,找到了命令数组redisCommandTable先从最简单的set命令开始看,如何进行最简单的键值对进行set。2.setCommandsetCommand命令实现是在t_string.c文件中。这里主要是处理set if exist ,set if not exist,set expire 这三种情况。另外对set命令的value进行redisObject 对象构建。/* SET key value [NX] [XX] [EX <seco原创 2022-05-21 19:11:28 · 614 阅读 · 0 评论 -
redis源码之server接受客户端请求并处理(7)
1.处理客户端请求在server.c 的main方法中,在启动的时候针对网卡的各个ip会创建文件事件用于监听tcp请求。tcp请求会交给acceptTcpHandler去处理。而readQueryFromClient就是用来处理文件读事件处理的。对于做java的人来说,其实跟netty里对于连接事件,读事件,写事件监听与处理的模式一样。2.处理读事件readQueryFromClient方法所在地:networking.c文件中的readQueryFromClient方法处理流程:nre原创 2022-05-11 21:50:02 · 430 阅读 · 0 评论 -
redis客户端启动与交互简要分析(6)
上图1.redis客户端启动主流程分析目前研读的代码是redis5.0,启动流程在redis-cli.c的main函数中先列一下main函数中,我认为比较重要的函数main(){ // 客户端默认配置设置 config.hostip = sdsnew("127.0.0.1"); .... // 2.解析命令行携带的参数 firstarg = parseOptions(argc,argv); // 3. 针对不同的模式进行处理 CLUSTER_MANAGER_MODE() c原创 2022-05-11 18:51:49 · 466 阅读 · 0 评论 -
redis源码之RESP协议格式组装(5)
背景在我们在通过redis-cli启动交互界面时,在界面输入的set key1 value1这种命令会被redis-cli转化为特定的格式传给redis-server。这个格式就是RESP协议。基本格式*参数数量\r\n$参数长度\r\n参数\r\n$参数长度\r\n参数\r\n//比如:原始命令:set key1 value1RESP命令:*3\r\n$4\r\nset\r\n$4\r\nkey1\r\n$6\r\nvalue1\r\n解析:*3\r\n //总共3个字符串$3\原创 2022-05-11 16:59:15 · 307 阅读 · 0 评论 -
源码解析之sds小结(4)
背景本次阅读的版本是redis5.0,sds共分为5种数据结构,sdshdr5,sdshdr8,sdshdr16,sdshdr32,sdshdr64。阅读主要的源码文件为sds.h和sds.c ,作为redis对字符串封装的结构体,它在内存控制,二进制安全,快速读取,字符串变长方面表现更好。缺点:占用更多的内存空间,毕竟有头信息的存在。1.sds基本结构从上图可以看出,其基本结构可以大致分为:头信息部分:字符串总长度:alloc字符串已使用长度:len字符串类型标识:flag字符串原创 2022-05-06 20:51:26 · 401 阅读 · 0 评论 -
redis源码之sds扩容
redis之sds扩容处理原创 2022-05-06 16:01:15 · 1094 阅读 · 2 评论 -
redis之sds对象创建
分类的意义在于空间精细分配,同时保留自由空间扩容。数据长度的作用是快速获取字符串并对二进制友好。原创 2022-05-05 21:29:04 · 278 阅读 · 0 评论 -
redis server服务端启动流程分析(一)
redis server启动源码解析原创 2022-04-06 22:21:20 · 1996 阅读 · 0 评论