Redis数据结构系列七:RedisObject

redis底层数据结构(一)-RedisObject 在看到refcount这个字段的时候,让我想到了jvm垃圾回收中的引用计数法和可达性分析算法,那么RedisObject中存在refcount字段,是否代表redis回收对象使用了引用计数法?它是 Redis 用来在内存中表示其支持的 5 种基本数据类型(字符串、列表、哈希、集合、有序集合)的底层统一结构。对于深入掌握 Redis 的内存管理、多态行为、内存优化机制至关重要。以下内容针对版本为redis7。 阅读详情

RedisObject

Redis中任意数据类型的键和值都会被封装成RedisObject,也叫redis对象。

在这里插入图片描述

  • unsigned type:4bit;表示的数据类型,即redis五大数据类型:string、set、zset、list和hash。

  • unsigned encoding:4bit; 底层数据编码方式,同一数据类型存在不同的编码方式。如sds动态字符串就存在5种不同的编码。

  • unsigned lru:LRU_BITS;24bit;标识最后一次被访问的时间,占用24bit。便于判断空闲时间太久的key。

  • int refcount:4byte;对象引用计数器,计数器为0时,代表该对象无人引用,可以被回收。类似JVM垃圾回收机制。

  • void *ptr: 8byte;数据内容指针,占用8个byte。

注意:
单个redisObject占用 4bit + 4bit +24bit + 4byte + 8byte = 16byte。

所以当十万个字符串数据全部使用sds动态字符串保存时,全被封装成redisObject,也就浪费十万 * 16byte的内存,造成巨大的内存浪费。所以,当数据较多时,选择合适的数据类型(最好别全部使用string类型),节省内存空间。

Redis编码方式

Redis会根据存储的数据类型不同,选择不同的编码,共包含11种数据类型编码。
在这里插入图片描述
五种基础数据类型对应的数据编码如下:
在这里插入图片描述

70_Redis数据结构-RedisObject Redis 中所有数据类型的键值都被封装成 RedisObject 结构。从使用者角度,Redis 节点在非集群模式下默认有 16 个数据库,集群模式下为 1 个,每个数据库通过字典维护键(字符串形式)到对象的映射,值有多种类型,RedisObject 实现了对不同值类型的统一表示。 阅读详情

相关推荐

Redis容量评估

Redis容量评估 Redis容量评估 fRedis容量评估 Redis常用的数据结构

redis底层数据结构之redisObject

redis底层数据结构之redisObject

qq_48669591的博客 507

EXCEL VBA 导出高清图片方法

EXCEL VBA 导出高清图片方法 将EXCEL表格内容另存为图片的方法有很多种,简单的比如“复制为图片格式并另存”,“打印成XPS”等等,本文着重的是利用VBA实现的方法。 该方法适合用于中大型图文表格输出为图片格式,方便传阅,在office2010及以上版本最为流畅。 具体看代码: Sub printA4() Dim rng As Range '定义截图范围变量 'm = 20...

nfser_burn7的专栏 1万+

redis数据类型

list、set、Hash、zset都是容器型数据结构,如果容器不存在,那就创建一个,如果容器中没有元素,那么立即删除容器,释放内存,例如list弹出最后一个元素后,list本身就消失了。ZSet 有两种不同的实现,分别是 ziplist 和 skiplist。:不满足以上两个条件时使用跳表、组合了 hash 和 skiplist。三种特殊的数据结构类型。

persistence_PSH的博客 791

华为2024机考真题集合

2.中位数是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组数据的个数为偶数,那就把中间的两个数之和除以 2,所得的结果就是中位数。在实际考试中会随机抽三道题目进行考察,其中两道100分卷题和一道200分卷题,总共400分。幼儿园组织活动,老师布置了一个任务:每个小朋友去了解与自己同一个小区的小朋友还有几个。3.查找整型数组中元素的众数并组成一个新的数组,求新数组的中位数。1.众数是指一组数据中出现次数量多的那个数,众数可以是多个。

qq_25360769的博客 5093

AI上推荐 之 协同过滤

㐇

Miracle8070 1万+

Redis源码剖析和注释(八)--- 对象系统(redisObject)

Redis 对象系统1. 介绍redis中基于双端链表、简单动态字符串(sds)、字典、跳跃表、整数集合、压缩列表、快速列表等等数据结构实现了一个对象系统,并且实现了5种不同的对象,每种对象都使用了至少一种前面的数据结构,优化对象在不同场合下的使用效率。 双端链表源码剖析和注释 简单动态字符串(SDS)源码剖析和注释 字典结构源码剖析和注释 跳跃表源码剖析和注释 整数集合源码剖析和注释 压缩列表源码

men_wen的博客 7548

14、网络切片技术:原理、应用与挑战

本文详细探讨了网络切片技术的原理、应用场景及其在5G网络中的重要性。网络切片作为一种关键的网络架构技术,能够在同一物理网络上创建多个独立的逻辑网络,以满足不同应用对安全性、可靠性和性能的多样化需求。文章深入分析了网络切片在5G、SDN/NFV等技术背景下的发展与挑战,并探讨了其在制造业、交通运输、零售等多个行业的实际应用。此外,还介绍了网络切片的部署流程、未来发展趋势以及相关技术难点,为读者全面了解网络切片技术提供了有价值的参考。

palm99的专栏 255

Redis系列 - Redis底层数据结构(简单动态字符串(SDS)、链表、字典、跳跃表、整数集合、压缩列表)

Redis系列 - Redis基本数据类型

u011485472的博客 2133

Silvaco TCAD 半导体器件仿真全攻略:从入门到精通

本文介绍了Silvaco TCAD半导体器件仿真平台的核心功能与应用方法。主要内容包括: Silvaco TCAD的核心模块组成(ATHENA工艺仿真和ATLAS器件仿真)及其在半导体研发中的重要作用,能够通过数值仿真预测器件电学特性,显著降低研发成本。 环境配置要点,包括内存分配、文件目录管理和许可证验证,为仿真工作提供基础保障。 仿真核心概念:详细讲解了网格划分策略和物理模型选择原则,强调基于物理直觉的自适应加密网格方法。 以PN结二极管为例,提供了完整的仿真代码示例,涵盖从网格定义、掺杂设置到结果分析

huanghm88的专栏 202

ArcGIS Pro SDK (二十五)工作流管理器

【代码】ArcGIS Pro SDK (二十五)工作流管理器。

Winemonk 494

解密redisObject属性和五大数据类型编码:让你彻底了解redis

解密redisObject属性和五大数据类型编码:让你彻底了解redis

我是Java程序员廖志伟,感谢朋友们的支持! 657

计算机应用数学--第一次作业

中科大 计算机应用数学 第一次作业

一杯水果茶!足矣~ 1329

Redis数据结构解析-RedisObject

RedisObject 是 Redis 中表示数据对象的结构体,它是 Redis 数据库中的基本数据类型的抽象。在 Redis 中,所有的数据都被存储为 RedisObject 类型的对象。// 数据类型,如字符串、列表、哈希等// 编码方式,如 int、raw、hashtable 等// Least Recently Used,用于记录对象最近被访问的时间// 引用计数,用于自动内存管理void *ptr;// 指向实际存储数据的指针} robj;type。

时间如瑾 代码如诗 1633

多图详解VSCode搭建Python开发环境

本文通过多图的方式详细介绍了VSCode搭建Python开发环境,希望能对学习Python的同学们有所帮助。 文章目录 1. VSCode的介绍和安装 2. 安装插件 2.1 安装中文插件 2.2 安装Python插件 2.3 安装远程插件 3. 远程连接服务器 3.1 配置ssh 3.2 运行代码 3.3 调试代码

weixin_43178406的博客 8万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

redis 从0到1完整学习 (十):RedisObject 数据结构

本文主要介绍 redisObject 数据结构。通过 redisObject 结构,Redis 能够灵活地处理不同类型和大小的数据,并且能够在内存管理和性能优化方面进行精细控制。

日常学习与专研的记录 1058

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Redis数据结构之RedisObject

Redis是一种高性能的开源内存数据存储系统,它支持多种不同类型的键值对。这些键值对的实现是基于一系列底层的数据结构。Redis底层数据结构包括字符串、双端链表、字典、压缩列表、整数集合等,但是Redis为了加快读写速度,并没有直接使用这些数据结构,而是在此基础上又包装了一层称之为RedisObject,RedisObject 有五种对象:字符串(String)、列表(List)、集合(Set)、有序集合(Sorted Set)和哈希(Hash)。

chengxuyuan_2012的专栏 1266

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【Redis】RedisObject 对象

在前面介绍各个底层数据结构时有提到, Redis 的每一种数据类型,比如字符串、列表、有序集, 它们都拥有不只一种底层实现(Redis 内部称之为编码,encoding), 这说明, 每当对某种数据类型的键进行操作时, 程序都必须根据键所采取的编码, 进行不同的操作。 Redis 构建了自己的类型系统, 这个系统的主要功能包括: redisObject 对象。 基于 redisObject ...

石臻说AI(szzdzhp001) 【原名 石臻臻的杂货铺】 4785

「Redis数据结构」RedisObject

redisObject对象非常重要,Redis对象的类型、内部编码、内存回收、共享对象等功能,都需要redisObject支持。

frozenpenguin的博客 1626

Redis 设计与实现: redisObject 数据结构,以及 Redis 的数据类型

redisObject 数据结构,以及 Redis 的数据类型 redisObject 是 Redis 类型系统的核心, 数据库中的每个键、值,以及 Redis 本身处理的参数, 都表示为这种数据类型。 redisObject 的定义位于 redis.h : /* * Redis 对象 */ typedef struct redisObject { // 类型 ...

AI天才研究院 9309

⭐️深入Redis内核:从redisObject看Hash结构的嵌套误区⭐️

摘要: Redis的redisObject结构虽可封装多种数据类型,但Hash结构内部存在严格限制。通过分析源码发现,Redis维护了两层字典结构:全局字典(支持多类型Value)和Hash内部字典(仅限String类型Value)。物理上dictEntry的void*指针虽可指向任意地址,但逻辑上Hash内部Value被强制限定为字符串类型。这种设计避免了Redis成为文档型数据库,简化了持久化等机制。实际工程中如需嵌套数据结构,可采用序列化、Key命名空间或RedisJSON模块等解决方案。理解Redi

曦煜墨白的博客 2555

Redis数据结构详解

redis数据结构

2301_80926085的博客 3037

【Redis 源码】 RedisObject结构体

​⭐️对于RedisObject,分析到这,可以很好的理解它本身出现的意义和作用在C里通过指针地址来指向操作数据的地址空间,通过类型来定义操作多少byte内存空间大小,redisObject在进行了代码的高内聚抽象,形成了robj。在通过不同的属性,进行封装,利用位域达到最大化的空间利用率,再通过汇编代码角度,进行了robj层面的理解。

学习学习学习学习 1351

从源码看 Redis:深入理解 redisDb 和 redisObject

Redis 是一个广泛使用的内存数据库,以其高性能和丰富的数据结构而闻名。不同于磁盘数据库,磁盘数据库将数据读取到文件中维护,而内存数据库将数据存储在内存中,意味着其想要维护数据,必须在代码中维护一个保存数据的结构,而redis由c语言编写,对应的其一定是通过结构体来保存数据的结构。

dxh9231028的博客 1518

《Redis 源码深度剖析:从 SDS 到 RedisObject,吃透所有底层数据结构》

obsidian。

Solis的博客 973

Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)

在这个课程中,我们将深入探讨Redis的数据结构,包括动态字符串、intset、Dict、ZipList、QuickList、SkipList等,以及RedisObject的相关概念和实现原理。本文介绍了Redis中常用的数据结构,包括动态字符串、intset、Dict、ZipList、QuickList、SkipList等,以及RedisObject的相关概念和实现原理。这些数据结构在Redis中发挥着重要的作用,对于理解Redis的内部原理和优化应用具有重要意义。

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 2万+
上一篇: Redis数据结构系列六:SkipList跳表
下一篇: Redis五大基础数据类型详解
Musclewl
博客等级 码龄9年 215粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值