javaee论坛

普通会员

225648

帖子

331

回复

345

积分

楼主
发表于 2019-11-08 13:35:31 | 查看: 71 | 回复: 3

基于六种数据结构(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类型+编码

每种类型的对象都至少使用了至少两种不同编码,不同类型和编码对应不同的值对象:下篇讲解五种对象


普通会员

0

帖子

328

回复

337

积分
沙发
发表于 2019-11-19 01:04:08

看看

普通会员

0

帖子

300

回复

314

积分
板凳
发表于 2023-09-08 22:04:22

围观

普通会员

0

帖子

280

回复

289

积分
地板
发表于 2024-02-26 08:20:14

如果你智商能再高点,也许我会上当

您需要登录后才可以回帖 登录 | 立即注册

触屏版| 电脑版

技术支持 历史网 V2.0 © 2016-2017