很多人了解Redis主要从数据结构着手,其实日常工作中我们使用的都是Redis对象的操作命令,包括字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象。每一种对象底层对应了多种不同数据结构
对于Redis数据库保存的键值对来说,键总是一个字符串对象,而值则可以是字符串对象、列表对象、哈希对象、集合对象或者有序集合对象的其中一种。 Redis使用对象来表示数据库中的键和值,每次当我们在Redis的数据库中新创建一个键值对时,我们至少会创建两个对象,一个对象用作键值对的键(键对象),另一个对象用作键值对的值(值对象)。
typedef struct redisObject {
// 对象类型
unsigned type:4;
// 对象编码
unsigned encoding:4;
// 指向底层实现数据结构的指针
void *ptr;
// ...
} robj;
对象详解
Redis中的每个对象都由一个redisObject结构表示,该结构中和保存数据有关的三个属性分别是type属性、encoding属性和ptr属性:
REDIS_STRING
、REDIS_LIST
、REDIS_HASH
、REDIS_SET
、REDIS_ZSET
)中的一种。TYPE
命令返回数据库键对应的值对象的类型REDIS_ENCODING_INT
、REDIS_ENCODING_EMBSTR
、REDIS_ENCODING_RAW
、REDIS_ENCODING_HT
、REDIS_ENCODING_LINKEDLIST
、REDIS_ENCODING_ZIPLIST
、REDIS_ENCODING_INTSET
、REDIS_ENCODING_SKIPLIST
的其中一个Syntax | Description |
---|---|
Header | Title |
Paragraph | Text |
123 每一个Redis数据结构都是有雨
● 当我们称呼一个数据库键为“字符串键”时,我们指的是“这个数据库键所对应的值为字符串对象”; ● 当我们称呼一个键为“列表键”时,我们指的是“这个数据库键所对应的值为列表对象” ● TYPE命令的实现方式也与此类似,当我们对一个数据库键执行TYPE命令时,命令返回的结果为数据库键对应的值对象的类型,而不是键对象的类型:
对象类型有5种,但是底层数据结构(内部编码)对应8种 。