zl程序教程

您现在的位置是:首页 >  .Net

当前栏目

redis常见的数据类型及其底层结构和应用场景

2023-02-18 16:41:51 时间

redis知识归纳

redis有如下几种数据类型

类型常量

对象

REDIS_STRING

字符串对象

REDIS_LIST

列表对象

REDIS_HASH

哈希对象

REDIS_SET

集合对象

REDIS_ZSET

有序集合对象

对于redis保存的键值来说,键总是一个字符串对象,值可以是其他类型

每种类型其实不仅限于一种数据结构,例如哈希集合有压缩列表的实现,也有哈希表的实现,这个取决于编码类型encoding

不同的编码类型对应不同的数据结构

编码类型

底层数据结构

REDIS_ENCODING_INT

long类型的整数

REDIS_ENCODING_EMBSTR

embstr编码的简单动态字符串(SDS)

REDIS_ENCODING_RAW

简单动态字符串(SDS)

REDIS_ENCODING_HT

字典

REDIS_ENCODING_LINKEDLIST

双端链表

REDIS_ENCODING_ZIPLIST

压缩列表

REDIS_ENCODING_INTSET

整数集合

REDIS_ENCODING_SKIPLIST

跳表和字典

而每种对象会对应不止一种编码方式

如下表:

类型常量

编码方式

底层数据结构

REDIS_STRING

REDIS_ENCODING_INT

使用整数实现的字符串

REDIS_STRING

REDIS_ENCODING_EMBSTR

使用embstr编码的SDS实现的字符串

REDIS_STRING

REDIS_ENCODING_RAW

使用SDS实现的字符串

REDIS_LIST

REDIS_ENCODING_ZIPLIST

使用压缩列表实现的列表

REDIS_LIST

REDIS_ENCODING_LINKEDLIST

使用双端链表实现的列表

REDIS_HASH

REDIS_ENCODING_ZIPLIST

使用压缩列表实现的哈希

REDIS_HASH

REDIS_ENCODING_HT

使用字典实现的哈希

REDIS_SET

REDIS_ENCODING_INTSET

使用整数集合实现的集合

REDIS_SET

REDIS_ENCODING_HT

使用字典实现的集合

REDIS_ZSET

REDIS_ENCODING_ZIPLIST

使用压缩列表实现的有序集合

REDIS_ZSET

REDIS_ENCODING_SKIPLIST

使用跳表和字典实现的有序集合

总结

如果一个字符串用来表示整数的时候,保存的形式是long,会将字符串转化为整型保存 其他情况字符串一般是使用SDS(简单动态字符串)表示

列表可以是压缩列表或者是双端链表

哈希可以是压缩列表或者是字典

集合可以是整数集合或者是字典

有序集合可以是压缩列表或者是跳表

对于底层数据结构的详细介绍在这里