Redis-0x17-redis对象redisObject
给一片内存,用户层是没办法进行解引用的,因为不知道数据的类型。因此redis定义了对象类型,万物皆可定义成对象,将来再逆向读出来。
因此,对象就要至少知道内存布局,以及数据的地址,对象关注3个方面信息
数据结构,或者说数据类型,数据结构偏侧与内存布局,数据怎么放的,一般由使用场景引发的存取方式来决定的
编码方式,关注的是用什么样的方式花最少的内存空间,表达更丰富的信息
数据,真实存放数据的地方
很简单的一个比方,比如我要找一个地方存放123456789
这个东西,怎么放?
可以把它看成一个长度是9的字符串,那么需要9个byte的空间来表达
也可以把它看成一个整数,32bit的整数,那么需要4byte的空间来表达
另一个场景,比如我要存放123
可以把它看作一个长度3的字符串,需要3byte空间
可以看作整数,需要4byte空间
因此redisObject整合了一个总的入口,它仅仅是一个redis跟外界进行数据存储方式的信息传达,不专注底层的布局、编码实现,仅仅相当于一个门卫
你放数据到redis的时候告诉redisObject这个数据是什么数据类型(用的什么数据结构)、怎么编码的、数据的地址
将来有人来取的时候,门卫再把上述信息告诉读者,那么读者自然知道怎么逆向读出真实的数据内容
1 UDT
c
1 |
|
2 创建对象
c
1 |
|
3 数据类型
数据类型,常用的无非就是那么几种,语言无关性
字符串
链表
集合
有序集合
哈希表
3.1 字符串
3.1.1 raw型编码
c
1 |
|
3.1.2 emb型编码
c
1 |
|
3.1.3 int型编码
c
1 |
|
3.2 链表
3.3 集合
3.4 有序集合
3.5 哈希表
Redis-0x17-redis对象redisObject
https://bannirui.github.io/2024/04/16/Redis/Redis-0x17-redis对象redisObject/