美文网首页
Redis对象类型、对象编码及对应关系

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

作者: Muscleape | 来源:发表于2020-05-17 13:38 被阅读0次

    摘要

    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对象类型、对象编码及对应关系

          本文链接:https://www.haomeiwen.com/subject/ncxsohtx.html