Redis对象类型、对象编码及对应关系

摘要

1、 Redis数据库中保存的键值对,键总是一个字符串对象,而值可以是字符串对象、列表对象、哈希对象、集合对象、有序集合对象;

Redis对象

Redis中对象都是由RedisObject结构表示,该结构中与数据保存有关的三个属性分别是type属性,encoding属性、ptr属性:

typedef struct redisObject{
    // 类型
    unsigned type:4;
    // 编码
    unsigned encoding:4;
    // 指向底层实现数据结构的指针
    void *ptr;
    // ... 其他
} robj;

类型

RedisObject对象的属性"type"记录了对象的类型,也就是常说的Redis支持的5种数据类型;

类型常量 对象的名称 type命令输出
REDIS_STRING 字符串对象 "string"
REDIS_LIST 列表对象 "list"
REDIS_HASH 哈希对象 "hash"
REDIS_SET 集合对象 "set"
REDIS_ZSET 有序集合对象 "zset"

编码和底层实现

encoding:对象使用的编码,也就是使用了什么数据结构作为对象的底层实现;

对象的ptr指针指向对象的底层实现数据结构,而这些数据结构由对象的encoding属性决定;

编码常量 编码对应的底层数据结构
REDIS_ENCODING_INT long类型的整数
REDIS_ENCODING_ EMBSTR embstr编码的简单动态字符串
REDIS_ENCODING_ RAW 简单动态字符串
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编码的简单动态字符串实现的字符串对象
REDIS_STRING REDIS_ENCODING_ RAW 使用简单动态字符串实现的字符串对象
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 使用跳跃表和字典实现的有序集合对象

你可能感兴趣的:(Redis对象类型、对象编码及对应关系)