07.对象

作者: 蜗牛ICU | 来源:发表于2019-07-14 20:46 被阅读0次

    1.简介:

       redis 不直接通过数据结构操作数据,通过对象操作数据。

    2.对象的类型和编码:

       redis 通过对象来表示数据库中的键和值,每次在数据库中创建一条数据时,至少保存了两个对象,一个是键对象,一个值对象。
       redis 中的每个对象有一个 redisObject 结构表示,该结构中和保存数据有关的三个属性分别是 type , encoding ,ptr 。
         类型 :
           type 对应下面几种类型:

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

         查询一个值是什么类型:

    TYPE 键名称
    

         TYPE 命令对应的数据类型:

    对象 对象TYPE的属性值 TYPE命令的输出
    字符串对象 REDIS_STRING "string"
    列表对象 REDIS_LIST "list"
    哈希对象 REDIS_HASH "hash"
    集合对象 REDIS_SET "set"
    有序集合对象 REDIS_ZSET "zset"

    2. 编码和底层实现:

       对象的 ptr 指针指向对象的底层实现数据结构,而这些数据结构有对象的 encoding 属性决定。encoding 属性记录了对象所使用的编码。
    TODO:

    3. 字符串对象 :

       字符串对象的编码可以是 int , raw , emstr 。
    TODO:

    4. 列表对象 :

       列表对象的编码可以是 ziplist 或者 linkedlist 。
    TODO:

    5. 哈希对象 :

       哈希对象的编码可以是 ziplist 或者 hashtable 。
    TODO:

    6. 集合对象 :

       集合对象的编码可以是 insert 或者 hashtable 。
    TODO:

    7. 有序集合对象 :

       有序对象的编码可以是 ziplist 或者 skiplist 。
    TODO:

    8. 类型检查和命名多态 :

    TODO:

    9. 内存回收 :

       因为 c 语言不具备自动回收的功能,所以 redis 在自己的对象系统中创建了引用计数器来实现垃圾回收机制。 在 redisObject 结构中有一个属性是 refCount 来实现垃圾回收的功能。
       对象的生命周期分为: 创建对象,操作对象,释放对象 。

    1. 创建对象 refCount 的值加 1 
    2. 当对象被一个新程序使用时,他的引用会加 1 .
    3. 当对象不在被一个对象使用时,引用减 1 .
    4. 当对象引用计数为 0 时,对象所占用的内存将会被释放 .
    
    

    10. 对象共享 :

       就是如果存的值相同时,redis 将会将键的指针指向数据库中原本就存在的值 。

    相关文章

      网友评论

          本文标题:07.对象

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