Redis对象的实现以及内存的管理


参考资料
参考资料
参考资料

抽象出来的的对象

Redis没有直接使用前面的几种数据结构来创建键值对数据库,而是对于这些数据结构来创建了一个对象系统。这个系统包含了字符串对象,列表对象,哈希对象,集合对象,有序集合对象

使用对象的好处

  • 在指向命令之前,根据对象的类型来判断一个对象是否可以执行给定的命令

  • 根据不同的使用场景,对对象设置多种不同的数据结构实现

  • Redis对象系统还实现了基于引用计数计数的内存回收机制,当程序不再使用某个对象的时候,这个对象所占的内存就会被自动释放

  • 带有访问时间记录信息。在服务器启用了maxmemory功能的情况下,空转时间较长的哪些键可能会优先被服务器删除

对象的类型和编码

数据底层存储结构

底层存储

在这里插入图片描述
Redis使用对象来表示数据库中的键和值,每次当我们在Redis的数据库中新创建一个键值对时,我们至少会创建两个对象一个,一个对象用作键值对的键(键对象),另一个对象用作键值对的值(值对象

RedisObject对象

Redis中的每个对象都由一个redisObject结构表示,该结构中和保存数据有关的三个属性分别是type属性。encoding属性和ptr属性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

字符串对象

字符串对象的编码可以是intrawembstr

编码

  • 若字符串对象保存的是整数值,并且这个整数值可以用long类型来表示,那么字符串会将整数值保存成int编码
  • 字符串对象保存是一个字符串值,并且这个字符串值大于等于32字节,那么字符传对象将使用SDS
  • 字符串对象保存是一个字符串值,并且这个字符串值小于等于32字节,那么字符传对象将使用embstr=编码,啊
    在这里插入图片描述
    long double类型表示的浮点数在Redis中也是作为字符串值来保存的
    在这里插入图片描述

编码的转换

在这里插入图片描述

列表对象

列表对象的编码可以是压缩列表链表
在这里插入图片描述

编码

在这里插入图片描述
在这里插入图片描述

hash对象

hash对象的编码可以是压缩列表字典

在这里插入图片描述

集合对象

集合对象的编码可以是整数集字典

在这里插入图片描述

有序集合对象

集合对象的编码可以是压缩队列跳表

在这里插入图片描述

在这里插入图片描述

类型检查和命令多态

内存回收

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值