Redis源代码概要


源代码获取 git clone https://github.com/antirez/redis.git

读代码之前,要先明白Redis是什么?它的整体结构是什么?这样读代码才不至于盲目。在对软件不太了解的前提下,想通过读源代码来熟悉它是件很困难的事。

但反过来,已知软件的功能,回过头来找找它是怎么实现的,待着问题来阅读代码可以收获更多。

  1. key value store.是⼀一个以key-value形式存储的数据库,定位直指MySQL,⽤用来作为唯⼀一的存储系统。
  2. memory cache.是⼀一个把数据存储在内存中的⾼高速缓存,⽤用来在应⽤用和数据库间提供缓冲,替代memcachd。
  3. data structrue server.把它⽀支持对复杂数据结构的⾼高速操作作为卖点,提供某些特殊业务场景的计算和展现需求。⽐比如排⾏行行榜应⽤用,Top 10之类的。

  redis的代码归类很清晰:代码有层次感。源码按功能分类,每个文件只干属于⾃己的事:

 

 Redis的整体架构图如下:

 

 

1,作为K-V Store, redis以一个哈希表保存着所有的对象。
2,作为⼀个memcached, 它的内存高速缓存与⽹络通讯接⼝值得分析。
3,作为⼀一个data structrue server, 它提供了多种数据结构

 

 

 

 

和刚才看到的⼀一样,”set hello world”命令往db->dict⾥插⼊k-v结构。
• 但是key和value都不是简单的字符串。
• redis支持五种数据类型(string, list, set, sorted set, hash)
• 为了代码简洁,redis将它们抽象为robj.

 

Redis是⾯向对象的:
• 它⽤了⼀一个redisObject的抽象类型来屏蔽具体的不同类型的数据结构。
redis有良好的设计:
• ⽤用createObject来创建具体的对象。
• ⽤用⼀一组具体函数createStringObject,createSetObject…来强化对象的创建,避免业务代码直接调⽤用createObject。
• 对object的操作,提供⼀一组专有函数。代码的结构要有合理理的抽象
• 从dict的Value, 到redisObject,到具体的t_string,再到底层数据结构sds。可以由远到近来查看redis的源码。⽽不是⼀下⼦就直接到了了char*, list等数据结构。

 

 

 

⽹络采用了reactor模型
• 对⽹网络代码有合理理的封装,将⽹络处理代码与业务处理代码进行了分离。
• 可以看到在setCommand函数⾥,不会交杂着对IO的读取,⽹络数据的缓冲等底层操作。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM