Redis源码 - Set(集合)

通常我们把Redis Set结构称为无序集合,这在一定程度上是有道理的。为什么是一定程度上呢,因为通过源码的实现过程我们发现了一些小细节。从sadd命令开始入手:

Redis源码 - Set(集合)

 

 

 sadd先按照redis的一贯套路 检查key是否存在,不存在就创建,存在就直接添加值。只是在sadd在创建key的时候它动了一点小心思,是什么呢?看代码先:

Redis源码 - Set(集合)

 

 

 简单理解就是如果传入的值能够被转换为数字类型则使用的intset这种方式来保存数据,不能就用set的方式来保存。那intset是什么,set又是什么呢?

Redis源码 - Set(集合)

 

 

 Redis源码 - Set(集合)

 

 

 Redis源码 - Set(集合)

 

 

intset就是intset结构体,而set就是dict结构体。而dict上的dictEntry被定义成了一个链表的形式(由于目前笔者c水平有限,细节就没法解释了

上一篇:大话Redis系列--实战案例总结(上)


下一篇:[970]Redis Sadd命令、Srandmember 命令