page contents

Redis的数据结构,打好基础,才能玩转NoSql

整数集合(intset) 1.整数集合的实现 集合键的底层实现之一 ,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现。 每个intset.h/intset...

整数集合(intset)

1.整数集合的实现

集合键的底层实现之一 ,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现。

每个intset.h/intset结构表示一个整数集合:

typedef struct intset {
//编码方式
uint32_t encoding;

//集合包含的元素数量
uint32_t length;

//保存元素的数组
int8_t contents[];
} intset;
Redis的数据结构(二),打好基础,才能玩转NoSql

一个包含5个int16_t类型整数值的整数集合

2.特性

整数集合的底层实现为数组,这个数组以有序、无重复的方式保存集合元素,在有需要时,程序会根据新添加元素的类型,改变这个数组的类型。可保存类型为int16_t、int32_t或int64_t的整数值 升级操作为整数集合带来了操作上的灵活性,并且尽可能的节约了内存 整数集合只支持升级操作,不支持降级操作

3.整数集合API

Redis的数据结构(二),打好基础,才能玩转NoSql

整数集合API

压缩列表(ziplist)

压缩列表是列表键和哈希键的底层实现之一。当一个列表键只包含少量列表项,并且每个列表项要么就是小整数值,要么就是比较短的字符串,那么Redis就会使用压缩列表来做列表键的底层实现。

1.压缩列表的构成

一个压缩列表可以包含任意多个节点(entry),每个节点可以保存一个字节数组或者一个整数值。如下图所示:

Redis的数据结构(二),打好基础,才能玩转NoSql

压缩列表的各个组成部分

其中的每个压缩列表节点组成如下图所示:

Redis的数据结构(二),打好基础,才能玩转NoSql

压缩列表节点的各个组成部分

2.特点

压缩列表是一种为节约内存而开发的顺序型数据结构 可以包含多个节点,每个节点可以保存一个字节数组或者整数值 添加新节点到压缩列表,或者从压缩列表中删除节点,可能会引发连锁更新操作,但这种操作出现的几率不高

3.压缩列表API

Redis的数据结构(二),打好基础,才能玩转NoSql

压缩列表API

对象

到此,我已经介绍了Redis用到的所有主要数据结构,包括简单动态字符串(SDS)、链表、字典、压缩列表、整数集合。

Redis并没有质检使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含了字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象,美中对象都用到了至少一种我们前面所介绍的数据结构。

Redis的数据结构(二),打好基础,才能玩转NoSql

对象的类型

好啦,基础的数据结构就介绍到这里了。

  • 发表于 2020-02-25 11:35
  • 阅读 ( 622 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1316 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章