redis之对象详解

栏目: 数据库 · 发布时间: 6年前

内容简介:我们都知道redis有五种数据类型那么redis内部是组织这些数据类型以及数据结,使其能够快速高效运行呢?下面就让我们来聊一聊redis的键值都是redisObject对象,即在创建时会生成一个用于键名的redisObject对象和一个用于键值的redisObject对象

我们都知道 redis 有五种数据类型 stringlisthashsetzset 并且自实现了 简单动态字符串双端链表字典压缩列表整数集合跳跃表 等数据结构;

那么redis内部是组织这些数据类型以及数据结,使其能够快速高效运行呢?下面就让我们来聊一聊 redis对象容器

redis对象

redis的键值都是redisObject对象,即在创建时会生成一个用于键名的redisObject对象和一个用于键值的redisObject对象

你可能会觉得奇怪, 那么redis是如何关联键值对? 这都是依赖于键空间,其结构是字典(key-value)用于绑定redisObject键值对

回到redisObject,其结构体如下:

typedef struct redisObject {
    // 类型
    unsigned type:4;
    // 编码
    unsigned encoding:4;
    // 指向数据的指针
    void *ptr;

    // 记录对象最后一次被程序访问时间,用于计算空转时长(当前时间-lru)
    unsigned lru:22; /* lru time (relative to server.lruclock) */
    // 引用计数,用于内存回收
    int refcount;
} robj;

其中字段描述:

字段 描述
type 记录了对象的类型名称 string,list,hash,set,zset
encoding 记录了对象所使用的编码名称 int,embstr,raw,hashtable, ziplist,intset,linkedlist,skiplist
lru 记录对象最后一次被程序访问的时间
refcount 引用计数 初始值为1

如图所示: redis之对象详解

从结构上可以知道redis_object很容易存储多种类型的数据(相当于自身实现了一个数据容器),那么redis_object又是如何根据不同的数据类型type选择对应的编码encoding呢?

类型与编码格式

REDIS_OBJECT中的ptr指向各类型的值,并且针对不同类型会有不同的编码格式,甚至同一类型根据值的不同也有不同的编码格式;

即redis会根据值的长度以及个数的不同选择其对应的编码格式,都是为了更好的优化对象在不同场景下的使用效率

以下便是所有的对象所对应的 编码格式 以及 场景

  1. 字符串 redis之对象详解

  2. 列表 redis之对象详解

  3. 哈希表 redis之对象详解

  4. 集合 redis之对象详解

  5. 有序集合 redis之对象详解

由此可见,redis五种类型的对象都用到了不止一种数据结构;

并且我们可以很清楚看到redis对象的类型与编码格式,因此可以很方便的执行类型检测(即当使用redis指令操作对象时,redis会先根据type来判断是否指令适用,再根据encoding编码来调用数据结构所对应的方法)

在次只是简单的介绍了下其redis对象结构,对于数据结构(如ziplist, linkedlist)的内部实现以及优势就不多赘言

相关文档: redis设计与实现


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

绝对价值

绝对价值

[美] 伊塔马尔·西蒙森 艾曼纽·罗森 / 钱峰 / 中国友谊出版公司 / 2014-7 / 45.00元

绝对价值指的是经用户体验的产品质量,即使用某件产品或者享受某项服务的切实感受。 过去,消费就像是押宝。一件商品好不好,一家餐馆的环境如何,没有亲身体验过消费者无从得知,只能根据营销人员提供的有限信息去猜测。品牌、原产地、价位、广告,这些重要的质量线索左右着消费者的选择。 然而,互联网和新兴科技以一种前所未有的速度改变了商业环境。当消费者可以在购买前查看到交易记录和消费者评价,通过便捷的......一起来看看 《绝对价值》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具