redis开源代码,redis csdn

  redis开源代码,redis

  Redis源注释-刘浩德科技博客-博客公园

  redis中发现的一个hiredis bug的总结来源说明:hiredis是redis官方提供的C客户端库。在阅读代码的过程中,我发现了一个bug,并记录了下来。Hiredis定义了一个结构上下文,代码如下(deps/hire dis/hire dis . h):https://github.com/antirez/hiredis/blob/master/hiredis.h157/*上下文用于连接redis */158typedef struct redis上下文{ 159interr/*错误标志,当没有时为0.阅读全文发布@ 2012-06-20 17:47刘浩德技术博客阅读(800) 评论(0)编辑redis源代码备注-serverCron总结:serverCron是redis每100ms执行一次的循环事件,由ae事件框架驱动。它主要完成以下任务:1 .记录周期时间:server . UNIX time=time(null)Redis使用全局状态缓存当前时间值。在vm实现和lru实现中,都需要记录每个对象的访问时间。这种情况下对精度的要求不高(100ms以内的存取值是没有问题的)。使用缓存的时间值的成本比每次调用time()系统调用的成本要低得多。2.更新lruClock值:updateLRUClock()将在实现LRU消除策略时用作比较的基准值。REDIS默认时间精度为10s(#defineREDIS阅读全文贴@ 2012-06-06-20: 33刘浩德技术博客阅读(950) 评论(0)编辑redis源代码备注-initServer总结:initServer是redis初始化服务器的入口,由main调用,位于initServerConfig、命令行参数分析和daemon判定之后,是Server最重要的入口。虽然代码看起来很简单(102行代码和大量赋值语句),但是有很多地方值得仔细研究。接下来逐行分析:函数的第一件事就是处理信号:899信号(SIGHUP,SIG _ IGN);900信号(SIGPIPE,SIG _ IGN);901 setupSignalHandlers();Redis主要作为守护进程运行,所以它没有控制终端。首先,忽略SIGHUP信号。(参见美联社.阅读全文贴@ 2012-05-30 21:23刘浩德技术博客阅读(1150) 评论(2)编辑redis来源注释-协议规范摘要:明文协议,请求-响应模式。看下面的链接:http://redis.io/topics/protocol 《Unix编程艺术》明确提倡使用纯文本协议。在规范的开始,作者指出Redis的协议设计是以下三点之间的折衷:实现简单、计算机解析快速、人类解析容易。一个如此注重性能的代码实现,选择了如此简单易懂的协议设计,相信对那些还在固执使用二进制协议设计的开发者来说,是一个启发。阅读全文贴@ 2012-05-28 16:35刘浩德技术博客阅读(78) 评论(0)编辑redis源代码备注-与LRU缓存相关的代码摘要:redis可以作为类似memcached的应用级缓存。当内存超限时,会根据配置的策略淘汰相应的kv,让内存保持足够的空间来存储新的数据。redis的conf文件中对此机制有很好的解释:194 #使用的内存不要超过指定的字节数195 #当达到内存限制时redis会根据选择的违规策略尝试移除keys196 #参见maxme阅读全文贴出@ 2012-05-27-09: 15刘浩德技术博客阅读(105) 评论(0)编辑redis源代码注释-redis 对过期值的处理(在redis.c中)摘要:Redis本博客分析其自适应淘汰机制。redis每100ms执行的serverCron函数中有以下语句:655 /*每个周期过期几个密钥,前提是这是master。656 *在从设备上,我们等待由主设备657 *合成的DEL操作,以保证严格的一致性.阅读全文贴@ 2012-05-25 15:56刘浩德技术博客阅读(110) 评论(0)编辑redis源注释-aof摘要:aof是redis提供的一种数据持久化机制,通过转储每一条命令,使数据与内存中的数据保持一致。

  1 # include redis . h 2 # include bio . h 3 4 # include signal . h 5 # include fcntl . h 6 # include sys/stat . h 7 # include sys/types . h 8 # include sys/time . H9 # include sys/resource . h10 #在阅读全文贴出@ 2012-05-22-20: 04阅读刘浩德技术博客(52) 评论(0)编辑redis源代码注释-slowlog摘要:slowlog是redis提供的工具它将长时间运行的命令以列表的形式存储在内存中,用户可以通过slowlog命令查看这些缓慢的查询,从而分析系统的瓶颈。最好的分析笔记是作者的笔记,除此之外,还会做一个简要的记录。slowlog.h 1 /*该结构定义了慢速日志列表*/2 typedef struct slowlogEntry内的一个条目{ 3 robj * * argv//记录查询参数4 int argcL.阅读全文贴@ 2012-05-20-19: 12刘浩德技术博客阅读(72) 评论(0)编辑redis源注释-redis-cli.c摘要:这段代码是redis的客户端接口,它与服务器端的交互使用的是deps目录下的hiredis c库。同时在这部分代码中,应用1 #include fmacros.h //下用于兼容性处理的mac 2 #include version.h //版本信息头文件,当前版本为2 . 4 . 10 3 4 # includesstdio . H5 # includestring . h6 # includestdlib . H7 #在阅读全文贴出@ 2012-05-20 12:40刘浩德科技博客阅读(72) 评论(3)关于编辑redis源代码的注释-bio这个文件是Redis后台IO服务的实现* *这个文件实现了我们需要在后台执行的操作。*目前只有一个操作,即后台关闭(2) *系统调用。这是需要的,因为这是最后一个过程.阅读全文贴@ 2012-05-17 20:52刘浩德技术博客阅读(75) 评论(0)编辑redis源代码notes - ae_epoll.c摘要:这部分代码是具体事件触发网络库的底层实现。Linux下有epoll设施,现在效率最高。就算讲究高效率,比如redis,它也只选择自动变速——水平触发(请谷歌自动变速和手动变速的典故)。据说libevent也被用作水平触发器。事不宜迟,看看代码。1 # include sys/epoll . h 2 3 typedef struct AEA pistate { 4 int epfd;5 struct epoll_event事件[AE _ SETSIZE];//存储epoll_wait返回后得到的事件列表6 } aeApiState//作为事件.阅读全文贴@ 2012-05-16 22:24刘浩德技术博客阅读(71) 评论(1)编辑redis源代码的注意事项-ae.c摘要:ae.c是redis事件框架的具体实现。这个博客给出了这个源代码的简要说明。它谈到了作者标记的一些未来可能的改进。AE . c 1 # Include stdio . h 2 # Include sys/time . h 3 # Include sys/types . h 4 # Include unistd . h 5 # Include stdlib . h 6 7 # Include AE . h 8 # Include z malloc . h 9 # Include config . h q阅读全文贴@ 2012-05-15 22:11刘浩德技术博客阅读(66) 评论(0)编辑redis源代码注释- ae.h摘要:ae framework是redis作者开发的事件处理框架Redis基于最小依赖原则实现了自己的一套,速度更快。Ae只有不到500行代码,但据说libevent有30000个附加代码,实现这个功能所付出的代码量已经超过了redis的所有代码。AE . h1 # ifndef _ _ AE _ h _ 2 # define _ _ AE _ h _ 3//同时支持的连接数,其实这个可以设置大一点4 # define AE _ setsize (1024 * 10)/*最大支持的FD数*/56 # define AE _ ok 07 # Defi.阅读全文贴@ 2012-05-15-08: 23刘浩德技术博客阅读(62) 评论(0)编辑redis源码说明- config摘要:redis配置文件的头文件,有一些与平台相关的配置,可以在这里设置。

  CONFIG . H 1 # ifndef _ _ CONFIG _ H 2 # Define _ _ CONFIG _ H 3 4 # ifdef __APPLE__ 5 # include availability macros . H 6 # endif 7 8/*将redis_fstat定义为fstat或fstat 64()*/9 #如果已定义(_ _ APPLE _ _)!DeFINED(MAC _ OS _ X _ Version _ 10 _ 6)10 # DEFINE redis _ FSTAT FST阅读全文贴出@ 2012-05-13 09:54刘浩德技术博客阅读(88) 评论(0)编辑Redis源代码备注-Endian摘要:对于目标机器为big endian的机器,byte。在三种数据结构中使用:intsetziplistzipmap,使得不同端机器生成的rdb文件格式统一(小端),易于兼容。代码太简单了。贴吧,不多说了。ENDIAN . H 1 # ifndef _ _ ENDIAN _ H 2 # define _ _ ENDIAN _ H 3 4 void memrev 16(void * p);5 void memrev 32(void * p);6 void memrev 64(void * p);7/*乐趣的变体.阅读全文贴@ 2012-05-12-22: 18刘浩德技术博客阅读(43) 评论(0)编辑redis源代码的注意事项-anet摘要:anet库是对redis实现tcp网络层和unix域的封装。redis的客户端和服务器使用TCP协议进行通信。基本的TCP套接字内容变得不那么枯燥了net . H 1 # ifndef ANET _ H 2 #定义ANET _ H 3 4 #定义ANET _ OK 0 5 #定义ANET _ ERR-1 6 # define net _ ERR _ len 256 7 8 # ifdefined(_ _ sun)9 # define af _ localaf _ UNIX 10 # endif 112 I.阅读全文贴@ 2012-05-12 20:47刘浩德技术博客阅读(61) 评论(0)编辑redis源代码备注-。dict . c 1 # include fmacros . h 2 3 # include stdio . h 4 # include stdlib . h 5 # include string . h 6 # include assert . h 8 # include limits . H9 # include sys/time . h10 # include type . h11 12 # include eq阅读全文贴于@ 2012-05-12-17: 19刘浩德技术博客阅读(68) 评论(0)编辑redis源代码注释- dict.h摘要毫不夸张的说,哈希表是redis所有存储的基础,也是redis飞得快的基础。注意:其实是有intset的,只是intset是为了持久化dump到硬盘时节省空间,和我们这里说的不一样。dict的设计怎么样?简单来说就是双表,“一主一从”,时不时的老调重弹。建议大家在看代码之前先了解一下这个设计。反正随便搜,文章很多。迪克特。H1 # ifndef _ _ dict _ H2 # define _ _ dict _ h34 # define dition _ ok05 # define dition _ err 16.阅读全文贴@ 2012-05-12 13:02刘浩德科技博客阅读(48) 评论(0)编辑redis源注释- testhelp摘要:testhelp.h是作者为redis量身定制的单元测试框架。对于redis规模的项目,没必要用GTEST做杀手锏。作者有18行代码来修复它。遗憾的是,在redis的2.4.10版本中,只有sds使用了这个测试框架。我想知道其他代码编写人员是如何进行测试的。我慢慢摸索,找到了就告诉大家。1 # ifndef _ _ test help _ H 2 # define _ _ test help _ H 3 4 int _ _ failed _ tests=0;//失败的测试用例数为5 int _ _ test _ num=0;//测试用例总数6 #defin.阅读全文贴@ 2012-05-12 10:01刘浩德技术博客阅读(36) 评论(0)编辑redis源代码的注意事项-sds摘要:sds和adlist一样,是redis的基本数据结构之一,是它为自己实现的字符串类型。a动态字符串libraries . h1 # ifndef _ _ SDS _ H2 # define _ _ SDS _ h34 # define SDS _ max _ pre alloc(1024 * 1024)//字符串最大预分配长度为1m 56 # includes ys/types . H7 # includes darg . h8 .//SDS本身被typedef定义为char*,这是大多数后续函数的参数之一。(1) 10 .阅读全文贴@ 2012-05-12 09:10刘浩德技术博客阅读(64) 评论(0)编辑redis源代码注释-adlist摘要:adlist是redis本身实现的一个通用双向链表。

  -ad List . H-# ifndef _ _ ad List _ H _ _ # define _ _ ad List _ H _ _/*目前使用的数据结构只有节点、列表和迭代器。*/typedef struct list node { struct list node * prev;阅读str发布的全文@ 2012-05-10-23: 24刘浩德技术博客阅读(77) 评论(0)编辑redis源注释-redis.conf摘要:redis.conf是redis-server的配置文件# redisconfigurationfile example #关于单元的说明:需要内存大小时可以以1k 5GB 4M等常用格式指定# it:# # 1k=1000字节# 1kb=1024字节# 1m=1000000字节# 1mb=1024* 024字节# 1g=100000000b阅读全文@ 2012-05-10 00:10刘浩de Technology博客阅读(79) 评论(0)编辑计划开始编写redis源代码摘要redis的版本是2.4.10。以源代码分析的形式写,类似于结合代码写注释。阅读全文

redis开源代码,redis csdn