redis系列

redis数据结构(五):redis对象 robj

2020-05-30  本文已影响0人  范柏柏

综述

什么是robj

这些都是底层数据结构。rediis并不会直接对外使用。redis会把他们再封装一层对外使用,封装的这一层就是robj。

使用robj的好处是:

来看看数据结构

typedef struct redisObject {

    // 类型
    unsigned type:4;
    
    // 编码
    unsigned encoding:4;
    
    // 指向底层实现数据结构的指针
    void *ptr;
    
    // 引用计数
    int refcount;
    
    // 空转时长
    unsigned lru:22;
}

类型:指的是对外的类型
编码:指的是对内的数据结构

对外的类型 type

类型常量 对象的名称
REDIS_STRING 字符串对象
REDIS_LIST 列表对象
REDIS_HASH 哈希对象
REDIS_SET 集合对象
REDIS_ZSET 有序集合对象

字符串对象

字符串对象.png

列表对象

列表对象.png

哈希对象

哈希对象.png

集合对象

集合对象.png

有序集合对象

有序集合对象.png

对内数据结构 encoding

编码常量 所对应的底层数据结构
REDIS_ENCODING_INT long类型整数
REDIS_ENCODING_EMBSET embstr编码的SDS
REDIS_ENCODING_RAW SDS
REDIS_ENCODING_HT 字典
REDIS_ENCODING_LINKEDLIST 双向链表
REDIS_ENCODING_ZIPLIST 压缩列表
REDIS_ENCODING_SKIPLIST 跳表
REDIS_ENCODING_INTSET 整数集合

使用object encoding 命令可以打印出 编码

编码.png

类型和编码的搭配

类型 编码 对象
string int 使用整数值实现的字符串对象
string embstr 使用embstrSDS实现的字符串对象
string raw 使用SDS实现的字符串对象
list ziplist 使用压缩列表实现的列表对象
list linkedlist 使用双向链表实现的列表对象
hash ziplist 使用压缩列表实现的哈希对象
hash ht 使用字典实现的哈希对象
set intset 使用整数集合实现的集合对象
set ht 使用字典实现的集合对象
zset ziplist 使用压缩列表实现的有序集合对象
zset skiplist 使用跳表和字典实现的有序集合对象
上一篇 下一篇

猜你喜欢

热点阅读