Redis数据结构系列七:RedisObject

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种数据类型编码
在这里插入图片描述
五种基础数据类型对应的数据编码如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis在底层使用了多种数据结构,包括链表、字典和跳跃表。链表是Redis自己构建的数据结构,因为C语言并没有内置链表结构。链表在Redis中被广泛应用,用于实现列表等数据类型。字典用于实现Redis中的键值对存储结构,它能够通过键快速地查找对应的值。跳跃表是一种用于有序集合键和集群节点内部数据结构数据结构,它能够提供较快的查找和插入操作。除了这些数据结构Redis还使用redisObject来表示这些数据结构的底层实现,redisObject有三个重要的属性,分别是type、encoding、ptr。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Redis的六种底层数据结构](https://blog.csdn.net/A12115419/article/details/122198783)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [redis数据结构的底层实现](https://blog.csdn.net/qq_43216019/article/details/129225687)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值