008-Redis-数据结构-redisObject

Posted 花好夜猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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资料,资料实时更新....


往期推荐








end


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

扫码催更

获取资料

小视频

以上是关于008-Redis-数据结构-redisObject的主要内容,如果未能解决你的问题,请参考以下文章

Redis常用数据类型介绍使用场景及其操作命令

知识索引数据结构(C语言)

数据结构有哪些分类呢?

在数据结构中数据、数据元素、数据对象、数据结构、存储结构、数据类型以及抽象数据类型的定义分别是啥

数据结构与数据类型有啥区别?

数据结构都有哪些