《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 类型+编码

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

猜你喜欢

转载自blog.csdn.net/qq_41594698/article/details/94459091
今日推荐