Redis 源码分析 (一)Redis竟然用 C 语言进行面向对象编程

在github上找到的一个最早的版本,1.30,这个版本里面已经加入了对很多不同类型的支持,还有一个自己管理内存的 VM,不过总体说来 Redis 的代码还是非常简单易懂的,这个系列不准备一行行的分析代码,就把 Redis 实现的亮点说一下吧。今天分析第一个亮点,Redis 虽然是使用 C 写的,但是其内部的构造其实是面向对象的。

typedef struct dict {
    dictType *type;
    void *privdata;
    dictht ht[2];
    int rehashidx; /* rehashing not in progress if rehashidx == -1 */
    int iterators; /* number of iterators currently running */
} dict;

Redis 内部简单来说就是一个大哈希表,dict 就是装这个哈希表的地方。但是对于不同的类型的 哈希表哈希函数是不同的,key、value 的构造函数和析构函数肯定也是不一样的(Redis 支持 String、List、Set 的数据结构),但是从某个 key 找到对应值的这种哈希表的操作是相同的,如果每个类型都重新写一个哈希表的确是太烦了,这个问题使用 Java,C++ 等支持面向对象的语言很容易就解决了,比如写一个 dict 的抽象类,把 key,value的构造和析构函数以及哈希函数写成抽象接口,然后把查找这种函数利用抽象接口实现出来,然后再搞几个 StringDict子类、ListDict 子类来继承这个父类,问题就解决了。
但是 C 语言中没有继承和多态啊,这怎么办?
办法都是人想出来的,语言根

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值