码迷,mamicode.com
首页 > 其他好文 > 详细

Redis源代码概要

时间:2017-12-09 21:05:48      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:red   iso   key   emc   ted   简洁   分享   良好的   替代   

源代码获取 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的读取,?络数据的缓冲等底层操作。

Redis源代码概要

标签:red   iso   key   emc   ted   简洁   分享   良好的   替代   

原文地址:http://www.cnblogs.com/jackson-zhou/p/8012358.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!