dict
在redis中最基本的三个数据结构是dict 、adlist和sds,其中dict是redis中最重要的数据结构了,其key-value的映射关系就是通过dict来实现的,dict的内部实现是hash table,这个哈希表的大小是动态增加或减少的,主要是依据哈希表中的元素个数;同时哈希表适用链接法来解决哈希冲突的,具体实现在dict.h和dict.c文件中;
adlist
adlist(a generic doubly linked list)双向链表,这个数据结构在redis中用的也比较多,包括像当前保存的客户端连接或者是value对应是list的实现等,都是用的adlist,这个应该来说比较简单,具体实现在adlist.h和adlist.c;
sds
还有一个比较基本的数据结构就是sds(dynamic string),对字符串处理的简单封装,具体细节实现在sds.h和sds.c中,有一篇文章是介绍sds的实现的,点击这里
redis作为key-value数据库,value支持的类型比较多,如string, list, set, hash table, zset(有序的集合),下面简单的介绍下内部是如何实现的:
string
string就比较简单了,直接使用前面提到的sds即可,但是这里redis为了保证尽量减少内存的占用,当String代表整数值时,将其转化为long类型来存储,节约内存,具体实现请参考t_string.c文件;
list
list类型的实现使用了两种数据结构adlist和ziplist,所在文件t_list.c
set
set的实现也是使用两种类型的数据结构,所在文件t_set.c
hash table
hash table的实现也会用到两种数据结构,所在文件t_hash.c
zset
zset有序集合,也会用到两种数据结构skip list 和dict,请参考我的上一篇blog 实现在t_zset.c中
通过看redis源码,发现其在内存优化方面确实做了不少工作,有很多可以学习的地方的~先写到这里吧。