[关闭]
@elibinary 2016-08-06T04:48:29.000000Z 字数 1360 阅读 879

浅谈 redisObject

未分类

2016-08-06

redisObject 是 Redis 类型系统的核心结构,Redis 所有的键、值都是由 redisObject 来表示, 大致结构如下:

  1. typedef struct redisObject {
  2. // 类型
  3. unsigned type:4;
  4. // 对齐位
  5. unsigned notused:2;
  6. // 编码方式
  7. unsigned encoding:4;
  8. // LRU 时间(相对于 server.lruclock)
  9. unsigned lru:22;
  10. // 引用计数
  11. int refcount;
  12. // 指向对象的值
  13. void *ptr;
  14. } robj;

我们主要看其中的 type 和 encoding。

首先我们知道 Redis 的几种常用数据类型分别是:

type 表示的其实就是value对象具体是其中哪种数据类型,而 encoding 则表示的是其在redis内部的编码方式,redis 的编码有如下这些:

name desc
raw 字符串
int 整数
ht 哈希表
zipmap
linkedlist 双向链表
ziplist 压缩列表
intset 整数集合
skiplist 跳跃表

可以看出 encoding 类型是比 type 的种类多的,其实它们的关系并不是一对一的,一种 type 在 Redis 内是可以有多种不同的编码方式的,下面列举了其间关系:

此处输入图片的描述

Redis 2.6 开始, zipmap 不再是任何数据类型的底层结构

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注