Redis - 图解redis五种常用数据结构底层实现


  Redis 使用键值对存储数据,其中的值(对象)包括 5 种类型,即字符串、列表、哈希、集合、有序集合,这是 Redis 对外提供的,实际上,在 Redis 内部每种类型可能有 2 种或更多的内部编码实现。

1、字符串(string)

其中:embstr和raw都是由SDS(简单动态字符串)构成的。

唯一区别是:raw是分配内存时,redisobject和sds各分配一块内存,而embstr是redisobject和raw在同一块内存中。

2、列表(list)

压缩列表是在数据结构中元素较少时采取的数据结构,使用压缩列表节约了内存开支,但是降低了访问的速度,不过对于规模较小的对象,这样的损失可以忽略不记。

3、哈希(hash)

4、集合(set,)

一个 value 为 null 的 hash 表,所以添加,删除,查找的复杂度都是0(1)。

5、有序集合(zset,)

简单说来跳跃表()也是链表的一种,只不过它在链表的基础上增加了跳跃功能,正是这个跳跃的功能,使得在查找元素时,跳跃表能够提供O(logN)的时间复杂度。

跳跃表查询、插入、删除的时间复杂度均是O(logN)。

为什么使用跳表作为ZSet实现的索引,而不使用红黑树、B+树?