【008】-Redis-数据结构-redisObject



点击

蓝色

字体催更



Redis 针对不同的数据结构定义统一的数据结构 redisObject 来进行管理。

换句话说,redisObject 是所有数据结构的最外层的一层结构定义。


 redisObject 介绍


redisObject 对应的 C 源码结构

`src/server.h 615行`

【008】-Redis-数据结构-redisObject

为了更直观我将这个代码结构以图片的形式画出来


【008】-Redis-数据结构-redisObject

redisObject 由五个属性组成

1
type

`type` 表示当前值对象的一个数据类型,在上一级视视频中,我们用来验证 bitmaps,typeloglogs ,geo底层的数据结构类型的时候使用的 type 命令。

Redis 5.x 支持六种数据类型:string,hash,set,list,zset,stream。

所以 type 的取值有六种。

小贴士



`type {key} ` 的方式查看当前 `kye-value` 的数据类型

2
encoding

enconding 表示当前值对象底层存储的编码格式。

Redis 针对每种数据结构都设计有多种编码格式进行数据存储。比如说:单纯一个字符串的编码Redis 就提供了 int,embstr,raw 三种编码格式。

 关于编码后面会谈到。而 encoding 就是用来表示当前数据存储采用的是那种编码格式。

encoding 相关属性值在源码中有定义,相关代码如下:

`src/server.h` 文件

【008】-Redis-数据结构-redisObject

小贴士



`object encoding key` 查看当前 `kye-value` 的数据类型

3
lru

`lru` 这个字段用来记录对象最后一次访问时间,当 Redis 配置了最大内存配置 maxmemory 后,再触发执行执行 lru 策略的时候,用来辅助 lru 策略删除数据用的。

4
refcount

`refcount` 记录了当前对象被引用的次数,当 refcount =0时,表示可以安全回收当前对象。

当配置有 maxmemory 时,存在共享对象池,[0-1000] 范围内的数值存在共享对象,这些共享对象被引用的次数越多相应的 refcount 越大。

小贴士



`refcount key` 查看当前 `key-value` 的引用次数

5
ptr

ptr 就是真实存储数据的指针。指向真实数据。

 简单例子:redisObject 表示字符串

set age 18

假设此时 Redis 中存在一个字符串,如上

此时该字符串对应的一个 redisObject 抽象图如下:

【008】-Redis-数据结构-redisObject

根据图片我们能够知道Redis中该字符串的讯息

首先 age 的数据结构类型为 string,

并且 该字符串的编码为 int 。

lru 是这个对象最近一次被访问的时间

refcount 表示的当前对象被引用的次数

ptr 存储的是当前这个 age 对应的值,也就是 18。

【回复:Redis资料包】 

获取相关Redis资料,资料实时更新….

往期推荐





【005】-Redis-Release-notes无法访问解决



【006】-Redis-Docker启动单实例服务



【007】-Redis-Redis 六种数据结构简介

end



【008】-Redis-数据结构-redisObject

扫码催更

获取资料

小视频

【008】-Redis-数据结构-redisObject

来源:花好夜猿,本文观点不代表自营销立场,网址:https://www.zyxiao.com/p/73493

发表评论

电子邮件地址不会被公开。 必填项已用*标注

侵权联系
分享本页
返回顶部