reids对象及对应的底层编码

摘要

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             使用跳跃表和字典实现的有序集合对象

数据类型&编码&底层数据结构 对照图

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,976评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,249评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,449评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,433评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,460评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,132评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,721评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,641评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,180评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,267评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,408评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,076评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,767评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,255评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,386评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,764评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,413评论 2 358

推荐阅读更多精彩内容

  • 摘要 1、 Redis数据库中保存的键值对,键总是一个字符串对象,而值可以是字符串对象、列表对象、哈希对象、集合对...
    Muscleape阅读 387评论 0 1
  •  Redis 使用对象来表示数据库中的键和值, 每次当我们在 Redis 的数据库中新创建一个键值对时, 我们至少...
    one_zheng阅读 168评论 0 0
  • 上周看完Redis设计与实现,过程结合Redis的unstable分支的源码来对照,基本对Redis的实现原理有了...
    zcliu阅读 1,033评论 0 1
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 125,266评论 2 7
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 6,055评论 0 4