首页 > 其他分享 >对象reids

对象reids

时间:2024-06-18 15:28:42浏览次数:15  
标签:编码 encoding 对象 reids redis 数据结构 底层

对象

  • redis并没有直接使用之前学的数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统

  • 这个对象系统包含了字符串对象、列表对象、哈希对象、集合对象、有序集合对象这五种,每个对象都用到了至少一种之前的数据结构

  • redis可以在执行命令之前,根据对象的类型来判断一个对象是否可以执行给定的命令

  • 我们也可以针对不同的使用环境为对象设置多种不同的数据结构实现,从而优化对象在不同 在不同场景下的使用效率

  • reids的对象系统还实现了基于引用计数技术的内存回收机制,当程序不再使用某个对象时,会将其所占内存释放,另外redis还通过引用计数技术实现了对象共享机制,这一机制可以让多个数据库共享同一个对象来节约内存

  • reids的对象带有访问时间记录信息,该信息可以计算数据库键的空转时长,在服务器启用了maxmemory功能的情况下,空转时长较大的那些键可能会优先被删除

  • 对象的类型与编码:

    • 我们创建键值对时,就至少会创建两个对象,一个键对象,一个值对象

    • redis中的每一个对象都是由一个reidsObject结构来表示:

      typedef struct reidsObject {
          //类型
          unsigned type: 4;
          //编码
          unsigned encoding: 4;
          //指向底层实现数据结构的指针
          void *ptr;
          // ...
          
      } robj
      
    • 类型:

      • 对键使用type命令可以显示其键对应值的类型
    • 编码和底层实现:

      • ptr指针指向对象的底层实现数据结构,而这些数据结构是由对象的encoding属性决定的
      • encoding记录了2对象所使用的编码,也就是说这个对象使用了什么数据结构作为对象的底层实现
      • 每种类型的对象都至少使用了两种不同的编码,每种编码对应了一种底层数据结构
      • 通过encoding来为对象设定编码,极大地提高了redis的灵活性和效率

标签:编码,encoding,对象,reids,redis,数据结构,底层
From: https://blog.csdn.net/2302_80742310/article/details/139774982

相关文章

  • 【UG\NX二次开发】PK 求对象在某方向上的极限点(PK_BODY_find_extreme)
    UF_initialize();tag_tps_tag=null_tag;UF_PS_ask_ps_tag_of_object(objtag,&ps_tag);//通过NX对象获取PK对象 doublemainDir[3]={0,0,1};//求对象在主方向上的极限点,此处是在求正Z方向上的极限点doublemtx[9]={0};UF_MTX3_initialize_x(mainDir,mtx);......
  • C#面:请说说C#引用和对象?
    在C#中,引用和对象是两个重要的概念。引用是指向内存中对象的指针或者句柄。在C#中,所有的类都是引用类型,这意味着当我们创建一个类的实例时,实际上是在内存中分配了一块空间,并返回一个指向该空间的引用。通过引用,我们可以访问和操作对象的成员。对象是在内存中分配的一块空间,用......
  • Day28.课程对象定义与使用
    1.课程对象定义与使用_课程类和班级类关联 班级类,Class:'''班级'''classClass:#__init__中,初始化单个对象,记录每个班级独有的东西def__init__(self,class_name):self.class_name=class_name#初始班级时,班级没有课程表self.cla......
  • js实例对象读写原型对象成员
    在JavaScript中,实例对象可以读写原型对象的成员。原型对象是一个对象,用于存储共享的属性和方法,它是通过构造函数创建的实例对象的共享属性和方法的来源。你可以通过以下几种方式来读写原型对象的成员:通过实例对象的__proto__属性来读取原型对象的成员。__proto__属性指向......
  • 第一百一十节 Java面向对象设计 - Java泛型类
    Java面向对象设计-Java泛型类使用泛型,我们可以在不知道代码操作对象的类型的情况下编写代码。它允许我们创建泛型类,构造函数和方法。泛型类是使用形式类型参数定义的。形式类型参数是一个逗号分隔的变量名列表,位于类声明中类名后面的尖括号<>中。语法下面的代码声明一......
  • Java面向对象:初识继承
    继承:一个类(子类或派生类)继承另一个类(父类或基类)的特性(属性和方法)。1、继承1.1、不使用继承例子:classDog{Stringname;intage;publicDog(Stringname,intage){this.name=name;this.age=age;}publicvoideat(){......
  • 面向对象程序设计1.2 类之间的组合关系
    一、复习一下在1.1里我们定义了类Date,忘记的小伙伴可以看看下面的代码classDate{private:intyear;intmonth;intday;//数据成员,默认为私有public:Date():year(2000),month(1),day(1){}//不带参数的构造函数Date(intyear,intmonth,in......
  • UML_结构类_对象图
    对象图描述某一时刻系统的对象的静态状态,或者是类图某一时刻的实例包含元素对象对象名格式为对象名:类名,对象名称下面加下划线用于区分对象图和类图,对象名字可以省略属性没有方法,并且每个属性都有当前的值链直线表示,没有箭头,没有多重性电脑组成的......
  • c# .Net 对象池
    对象池就是对象的容器,旨在优化资源的使用,通过在一个容器中池化对象,并根据需要重复使用这些池化对象来满足性能上的需求。当一个对象被激活时,便被从池中取出。当对象被停用时,它又被放回池中,等待下一个请求。对象池一般用于对象的初始化过程代价较大或使用频率较高的场景。在ASP.......
  • 【PL理论】(29) OOP:面向对象编程 | 案例研究:C++ 中的类 | 继承 | 继承和指针 | Object
    ......