07.对象

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.对象)