Redis笔记2----对象

redis中总共有五种类型的对象,分别是:字符串对象、双端链表、字典、压缩列表、整数集合。上述的五种类型的对象均具有相同的结构:
typedef struct redisobject{ //类型 type , // 编码 encoding , // 指向地层数据结构的指针 *ptr, // 最后访问时间 lasttime // 引用数量 refCount }

 

类型

 对象的类型总共为五种,如下:

  • REDIS_STRING : 字符串对象
  • REDIS_LIST : 列表对象
  • REDIS_HASH : 哈希对象
  • REDIS_SET : 集合对象
  • REDIS_ZSET : 有序集合对象

可以通过 type 命令验证 redis对象的类型

编码

编码决定了redis对象保存过程中所采用的数据结构。redis中对象的编码总共有如下八种:

  1. REDIS_ENCODING_INT : LONG类型的整数
  2. REDIS_ENCODING_EMBSTR : embstr 编码的简单动态字符串
  3. REDIS_ENCODING_RAW : 简单动态字符串
  4. REDIS_ENCODING_HT : 字典
  5. REDIS_ENCODING_LINKEDLIST : 双端链表
  6. REDIS_ENCODING_ZIPLIST : 压缩列表
  7. REDIS_ENCODING_INTSET : 整数集合
  8. REDIS_ENCODING_SKIPLIST : 跳跃表 和字典

redis中的对象与编码之间的对应关系就不一一列举了,每种对象都会采用两种编码格式。在对象占用内存较小时,redis采用一种编码;当对象占用较大的内存时,redis则会换种数据结构。

可以应用object encoding 命令验证对象的编码

引用数量

说到引用数量,便需要介绍下redis的内存回收机制。redis跟踪对象的引用计数,若是引用计数为零,则自动回收此对象。机制如下:

  1. 开始,创建一个对象,此对象的引用计数加1
  2. 若是此对象被另外一个键值引用,则此对象的引用计数加1
  3. 若是此对象不被另外程序使用,则此对象的引用计数减1
  4. 当次对象的引用计数为0 , 对象的内存自动释放

最后访问时间

每次访问redis的对象,此对象便会记录对象的最后访问时间。object idletime  命令可以查看对象的空转时长,即当前时间-最后访问时间。

 

posted @ 2020-04-26 21:48  一家人  阅读(108)  评论(0编辑  收藏  举报