美文网首页
第 8 章(对象)

第 8 章(对象)

作者: MatyLine | 来源:发表于2021-04-18 22:12 被阅读0次

    Redis Object

    Redis 基于之前的那些数据结构创建了一个系统对象,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象。
    Redis 对象系统实现了基于引用计数技术的内存回收机制,当程序不再使用某个对象的时候,这个对象所占用的内存就会被自动释放;另外,Redis 还通过引用计数技术实现了对象更像机制,这一机制可以在适当的条件下,通过让多个数据库键共享同一个对象来节约内存。
    最后,Redis 的对象带有访问时间纪律信息,该信息可以用于计算键的空转时长,在服务器启用了 maxmemory 功能的情况下,空转时长较大的那些键可能会优先被服务器删除。

    Define redisObject

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

    type

    类型常量 对象的名称
    REDIS_STRING 字符串对象
    REDIS_LIST 列表对象
    REDIS_HASH 哈希对象
    REDIS_SET 集合对象
    REDIS_ZSET 有序集合对象

    对于 Redis 数据库保存的键值对来说,键总是一个字符串对象,而值可以是这五种对象中的任意一种。
    TYPE 命令返回的结果为数据库键对应的值对象的类型,而不是键对象的类型。

    127.0.0.1:6379> set msg "Hello World"
    OK
    127.0.0.1:6379> TYPE msg
    string
    

    encoding & ptr

    encoding 就是记录了这个对象使用了什么数据结构作为对象的底层实现。

    编码常量 编码对应的底层数据结构
    REDIS_ENCODING_INT long 类型的整数
    REDIS_ENCODING_EMBSTR embstr 编码的渐动态字符串
    REDIS_ENCODING_RAW 简单动态字符串
    REDIS_ENCODING_HT 字典
    REDIS_ENCODING_LINKEDLIST 双端链表
    REDIS_ENCODING_ZIPLIST 压缩列表
    REDIS_ENCODING_INTSET 整数集合
    REDIS_ENCODING_SKIPLIST 跳跃表和字典
    不同类型和编码的对象

    我们可以使用 OBJECT ENCODING 命令查看一个数据库键的值对象的编码:

    127.0.0.1:6379> OBJECT ENCODING msg
    "embstr"
    127.0.0.1:6379> OBJECT ENCODING numbers
    "quicklist"
    

    相关文章

      网友评论

          本文标题:第 8 章(对象)

          本文链接:https://www.haomeiwen.com/subject/ncivlltx.html