美文网首页
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对象类型、对象编码及对应关系

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

  • Redis对象类型与数据结构

    1. 对象类型与编码 Redis的对象由redisObject结构表示: type属性表示对象的类型: encod...

  • [redis 源码走读] 对象(redisObject)

    redis 对象 redis 对数据的处理用对象进行管理,目前有5种类型。每种对象类型并不是用单一的编码类型实现,...

  • Redis 对象类型与编码

    Redis 使用对象来表示数据库中的键和值,每次 Redis 创建一个键值对时,至少会创建两个对象,一个键对象,一...

  • Redis对象类型和底层数据结构

    Redis对象类型(类型常量:对象名称) REDIS_STRING: 字符串对象 REDIS_LIST: ...

  • Redis源码学习之类型

    说明 redis内部的字符串对象,redis类型之REDIS_STRING 此种类型有三种编码方式分别为:OBJ_...

  • 07.对象

    1.简介: redis 不直接通过数据结构操作数据,通过对象操作数据。 2.对象的类型和编码: redis 通...

  • Redis对象(一) - 类型和编码

    对象 前边学习了Redis底层实现的各种数据结构, 包括SDS, list, skiplist, dict, in...

  • redis

    类型常量 对象的名称REDIS_STRING 字符串对象REDIS_LIST 列表对象REDIS_H...

  • Redis对象类型及应用

    Redis数据对象类型  Redis共有五种数据对象,包括:字符串、列表、hash表、集合、有序集合。每种对象都至...

网友评论

      本文标题:Redis对象类型、对象编码及对应关系

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