Redis源代码概要
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis源代码概要相关的知识,希望对你有一定的参考价值。
源代码获取 git clone https://github.com/antirez/redis.git
读代码之前,要先明白Redis是什么?它的整体结构是什么?这样读代码才不至于盲目。在对软件不太了解的前提下,想通过读源代码来熟悉它是件很困难的事。
但反过来,已知软件的功能,回过头来找找它是怎么实现的,待着问题来阅读代码可以收获更多。
- key value store.是?一个以key-value形式存储的数据库,定位直指mysql,?用来作为唯?一的存储系统。
- memory cache.是?一个把数据存储在内存中的?高速缓存,?用来在应?用和数据库间提供缓冲,替代memcachd。
- 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源代码概要的主要内容,如果未能解决你的问题,请参考以下文章