《Redis设计与实现》第八章总结一:对象

7.对象

基于六种数据结构(SDS、双端链表、字典、跳表、整数集合、压缩列表)创建了一个对象系统,这个对象系统包含字符串对象,列表对象,哈希对象,集合对象和有序集合对象;每种对象都用到了至少一种数据结构

  • 使用对象的好处:

1.可以在执行命令之前,根据对象的类型来判断是否可以执行该命令(类型字段作用)
2.可以针对不同的使用场景,为对象设置多种不同的数据结构实现,优化对象在不同场景下的使用效率(encoding字段作用),例子如下图:
在这里插入图片描述

  • 对象的特征:

1.对象实现了基于引用计数技术的内存回收机制,当程序不再使用某个对象时,内存会自动释放
2.对象实现了基于引用计数技术的对象共享机制,可以在适当的条件下,通过让多个数据库键共享同一个对象来节约内存
3.对象带有访问时间记录信息,可以用于计算数据库键的空转时长;在服务器启用了maxmemory功能的情况下,空转时长较大的那些键可能会优先被服务器删除

接下来将逐一介绍各个对象和对象的特征

7.1 对象的类型与编码

数据库的键和值就是用对象来表示的,创建一个键值对代表创建两个对象

redisObject结构:下图省略了refcount和lru属性,等到内存回收和空转时长时再做讲解
在这里插入图片描述
下面讲解其类型和编码属性

7.1.1 类型属性

对象的类型可以为下图中的其中一个:
在这里插入图片描述
Redis数据库键值对的键总是为字符串对象,值可以为任意五种对象之一
因此所说的xxx键,如列表键,意味着此键值对的值为列表对象
TYPE命令也是如此,显示的是值对象的类型:
在这里插入图片描述

7.1.2 编码属性

对象的ptr指针指向对象的底层实现数据结构,而这些数据结构由对象的encoding属性决定

不同的编码对应不同的数据结构:
在这里插入图片描述

7.1.3 类型+编码

每种类型的对象都至少使用了至少两种不同编码,不同类型和编码对应不同的值对象:
在这里插入图片描述
下篇讲解五种对象

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值