数据结构论坛

首页 » 分类 » 常识 » redis数据类型和编码
TUhjnbcbe - 2021/8/18 18:55:00

Redis使用对象来表示数据库中的键和值,每次当我们在Redis的数据库中新创建一个键值对的时候,我们至少会创建两个对象,一个对象用作键值对的键,另外一个对象创作键值对的值。

Redis中的每个对象都由一个redisObject结构表示,该结构中保持数据有关的分别是type属性、encoding属性和prt属性。

redis场景的对象类型有以下五种:

类型常量

对象的名称

string字符串对象list列表对象hashhash对象set集合对象zset有序集合对象

我们可以通过type来查看一个对象的类型,但是这个命令查询的是键对象类型:

通过objectencoding命令可以查看一个数据库键的值对象的编码,对应的表如下:

对象所使用的底层数据结构objectencoding命令输出整数intembstr编码动态字符串(SDS)embstr简单动态字符串raw字典hashtable双端链表linkedlist压缩列表ziplist整数集合intset跳跃表和字典skiplist

其对应关系如下

在对象中编码的转换关系如图,可以清晰的看出,哪种编码适合短数据的存储和哪些编码适合长数据的存储。

在这些数据结构中,用到的最少的就是skiplist,但是也是最经典的问题,下面结合我自己的理解来对跳跃表进行解释。

按照书上说的,跳跃表更简单的方式实现了平衡树,也就是减少了时间的复杂度,这种方式就是加上层的概念,也就是根据其内部算法生成1-32之间随机的数,但是其能够实现作用更加离不开它的有序的特点。其原理如图所示:

图中的查找明显比链表查找要少寻找了很多的节点,提高了程序的性能。

hickey

1
查看完整版本: redis数据类型和编码