搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 花好夜猿 > 【008】-Redis-数据结构-redisObject

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

花好夜猿 2020-07-31

点击

蓝色

字体催更




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》的版权归原作者「花好夜猿」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注花好夜猿微信公众号

花好夜猿微信公众号:iyehgnixihz

花好夜猿

手机扫描上方二维码即可关注花好夜猿微信公众号

花好夜猿最新文章

精品公众号随机推荐