小工具知识网

当前位置: 首页 > 行业知识 > Redis—对象机制

行业知识

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 处理命令的过程

    1. 根据给定的key,在数据库字典查找和他相对应的redisObject,找不到返回null
    2. 跟你redis的type类型属性和执行命令所需的类型是否相符,如果不相符,返回类型错误
    3. 根据redisObject的encoding属性所制定的编码,选择合适的操作函数来处理底层的数据结构
    4. 返回数据结构的操作结果作为命令的返回值

    共享对象

    Redis会预分配一些常用的数据对象,并通过共享这些对象来减少内存占用,和避免频繁的为小对象分配内存

    解释:

    在 Redis 中,有一些常用的数据对象,比如小整数值和共享字面量字符串,会被提前创建并保存在一个对象共享池中。这些常用的数据对象会被预先分配并共享在整个 Redis 实例中,当需要使用相同的值时,Redis 不会创建新的对象,而是共享已有的对象。这种共享机制有效地减少了相同数据对象的内存占用

    特点和作用:

    1. 预分配常用数据对象:Redis 会提前创建并保存一些常用的数据对象,如小整数值和共享字面量字符串。
    2. 对象共享:当需要相同的数据对象时,Redis 不会创建新的对象,而是共享已有的对象,避免了重复占用内存。
    3. 减少内存占用:通过共享相同数据对象,Redis 可以减少相同数据的内存占用,特别是对于那些频繁使用的对象。
    4. 提高性能:共享对象避免了频繁的内存分配和释放操作,从而提高了内存分配的效率和整体性能。
    5. 对象分配器优化:Redis 对于小对象的分配也进行了优化,通过对象分配器预先分配一块较大的内存空间,并将其切割成固定大小的块,以提高内存分配的效率。

上一篇:服务器怎么重新设置网络?

下一篇:怎么自设本地服务器地址?