行业知识
Redis—对象机制
2026-11-04 22:57:43
来源:互联网转载
对象机制(redisObject + 共享对象)
()★redisObject 意义 + 源码
���的:让每个key都带有类型信息,使得程序可以检查键的类型,并未它选择合适的处理方式
()比如说:我们在使用LPUSH 作用在列表上 SADD作用在集合上DEL用在任何数据类型上;为了实现这些不同的命令设置不同的处理方式,引入对象机制
操作数据的命令除了要对键的类型进行检查之外,还需要根据数据类型的不同编码进行多态处理
为了解决以上问题,Redis构建了自己的类型系统,这个系统的主要功能
- redisObject对象
- 基于redisObject对象的类型检查
- 基于redisObject对象的多态函数
- 对redisObject进行分配、共享和销毁的机制
底层源码:
typedef struct redisObject { // 类型:是哪种Redis对象 unsigned type:4; // 编码方式 unsigned encoding:4; // LRU - 24位, 记录最末一次访问时间(相对于lru_clock); 或者 LFU(最少使用的数据:8位频率,16位访问时间) unsigned lru:LRU_BITS; // LRU_BITS: 24 // 引用计数:用来描述有多少个指针,指向该对象 int refcount; // 指向底层数据结构实例 void *ptr;} robj;redisObject 处理命令的过程
- 根据给定的key,在数据库字典查找和他相对应的redisObject,找不到返回null
- 跟你redis的type类型属性和执行命令所需的类型是否相符,如果不相符,返回类型错误
- 根据redisObject的encoding属性所制定的编码,选择合适的操作函数来处理底层的数据结构
- 返回数据结构的操作结果作为命令的返回值
共享对象
Redis会预分配一些常用的数据对象,并通过共享这些对象来减少内存占用,和避免频繁的为小对象分配内存
解释:
在 Redis 中,有一些常用的数据对象,比如小整数值和共享字面量字符串,会被提前创建并保存在一个对象共享池中。这些常用的数据对象会被预先分配并共享在整个 Redis 实例中,当需要使用相同的值时,Redis 不会创建新的对象,而是共享已有的对象。这种共享机制有效地减少了相同数据对象的内存占用
特点和作用:
- 预分配常用数据对象:Redis 会提前创建并保存一些常用的数据对象,如小整数值和共享字面量字符串。
- 对象共享:当需要相同的数据对象时,Redis 不会创建新的对象,而是共享已有的对象,避免了重复占用内存。
- 减少内存占用:通过共享相同数据对象,Redis 可以减少相同数据的内存占用,特别是对于那些频繁使用的对象。
- 提高性能:共享对象避免了频繁的内存分配和释放操作,从而提高了内存分配的效率和整体性能。
- 对象分配器优化:Redis 对于小对象的分配也进行了优化,通过对象分配器预先分配一块较大的内存空间,并将其切割成固定大小的块,以提高内存分配的效率。
上一篇:服务器怎么重新设置网络?
下一篇:怎么自设本地服务器地址?