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

本文介绍了Redis如何在C语言中实现面向对象编程,通过使用结构体指针作为类型标识,并定义包含函数指针的dictType结构,实现不同类型的哈希表操作。Redis通过这种方法模拟了继承和多态,使得代码更具通用性和可扩展性。
摘要由CSDN通过智能技术生成

在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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值