type 对象的类型 类型常量对象的名称 REDIS_STRING 字符串对象 REDIS_LIST 列表对象 REDIS_HASH 哈希对象 REDIS_SET 集合对象 REDIS_ZSET 有序集合对象 ptr 指针 指向实际存储的对象的指针 encoding encoding 表示 ptr 指向的具体数据结构,即这个对象使用了什么数据结构作为底层实现。 编码常量编码所对应的底层数据结构 REDIS_ENCODING_INT long类型的整数 REDIS_ENCODING_EMBSTR enbstr编码的简单动态字符串 REDIS_ENCODING_RAW 简单动态字符串 REDIS_ENCODING_HT 字典 REDIS_ENCODING_LINKEDLIST 双向链表 REDIS_ENCODING_ZIPLIST 压缩列表 REDIS_ENCODING_INTLIST 整数集合 REDIS_ENCODING_SKIPLIST 跳表 每种类型的对象都至少使用了两种不同的编码,对象和编码的对应关系如下
refcount 引用计数器,当该值为0时,表示该对象已经不再被引用了,可以释放进行内存回收。 lru 最近一次访问时间
列表使用linkedlist实现
3.2版本后引入了quicklist,快速列表,quicklist是使用ziplist和linkedlist结合实现的,它把linkedlist分成多段,每段使用ziplist实现保持数据的紧凑,多个ziplist使用双向指针连接成链表; 列表使用quicklist实现
跳表是指通过维护多级索引,来优化查询时的速度。 跳表结构
数据结构时间复杂度 名称时间复杂度 哈希表 O(1) 查询时间稳定良好 跳表 O(logN) 数据量越大,时间复杂度逐渐降低 双向链表 O(N) 根据数据量线性增大 压缩列表 O(N)根据数据量线性增大 整数数组 O(N)根据数据量线性增大 各结构优点 名称时间复杂度 哈希表 查询快 跳表 有序,数据量大时查询快 双向链表 头尾节点访问快,适合按序访问 压缩列表 节省空间内存,小数据量情况使用 整数数组 节省空间内存,小数据量情况使用,无序