Redis设计与实现-读后总结

2019-06-05  本文已影响0人  wangxiaowu241

数据结构

Redis字符串 (SDS)

​ 相比C字符串区别

字典 (dict)

跳跃表

整数集合(intset)

压缩列表(ziplist)

Redis对象

Redis并没有直接使用SDS、双端链表、字典、整数集合等来实现键值对数据库,而是构造了一个对象系统。
好处:

字符串对象

列表对象

哈希对象

集合对象

有序集合对象

类型检查与多态

Redis命令主要分为两类,一类是针对所有Redis对象都可以执行的,如EXPIRE、DEL、RENAME、TYPE、OBJECT等,依赖是只针对指定Redis对象可以执行的。

类型检查实现:Redis在执行命令前,会先检查输入的键对应的值对象是否为执行命令所支持的类型,通过reidsObject的type属性实现,如果是,则对键执行指定的命令,否则,向客户端返回类型错误。

多态命令:Redis对象有不同的编码实现,不同的编码实现要实现同一个命令的效果,所以对于不同的编码,Redis需要调用底层实现不同的API来实现。

内存回收

C语言不具备自动内存回收功能,Redis在自己的对象系统中构建了一个基于引用计数实现的内存回收机制,通过这一机制,程序可以通过追踪对象的引用计数信息,在适当的时候自动释放对象,并进行内存回收。

每个对象的引用计数由RedisObject的refCount属性记录。

对象的引用计数变化:

引用计数的内存回收:

上一篇 下一篇

猜你喜欢

热点阅读