1、众所周知Redis有五大常见的数据类型,它们在Redis源码中由如下的结构体表示
typedef struct redisObject{
//类型
unsigned type:4;
//编码
unsigned encoding:4;
//指向底层数据结构的指针
void *ptr;
//引用计数
int refcount;
//记录最后一次被程序访问的时间
unsigned lru:22;
}robj
其中type就是那5中数据类型,如下表
对象 | type属性的值 | type命令的输出 |
字符串 | REDIS_STRING | “string” |
列表 | REDIS_LIST | “list” |
哈希 | REDIS_HASH | “hash” |
集合 | REDIS_SET | “set” |
有序集合 | REDIS_ZSET | “zset” |
2、实现上述5中数据类型的底层数据结构又有多种
类型 | 编码 | 对象 | 介绍 |
REDIS_STRING | REDIS_ENCODING_INT | 简单整数 | 用 long 类型表示的整数值 |
REDIS_ENCODING_EMBSTR | embstr编码的简单字符串 | 保存长度小于44字节的字符串(redis3.2版本之前是39字节,之后是44字节)。 | |
REDIS_ENCODING_RAW | 动态字符串 | 保存长度大于44字节的字符串(redis3.2版本之前是39字节,之后是44字节) | |
REDIS_LIST | REDIS_ENCODING_ZIPLIST | 压缩列表 | 1、列表保存元素个数小于512个 2、每个元素长度小于64字节 可以在redis.conf 配置文件中的 list-max-ziplist-value选项和 list-max-ziplist-entries 选项进行配置。 |
REDIS_ENCODING_LINKEDLIST | 双向链表 | ||
REDIS_HASH | REDIS_ENCODING_ZIPLIST | 压缩列表 | |
REDIS_ENCODING_HT | 字典(hashtable) | ||
REDIS_SET | REDIS_ENCODING_INTSET | 整数集合 | 1、集合对象中所有元素都是整数 2、集合对象所有元素数量不超过512 可以通过配置文件的 set-max-intset-entries 进行配置 |
REDIS_ENCODING_HT | 字典(hashtable) | ||
REDIS_ZSET | REDIS_ENCODING_ZIPLIST | 压缩列表 | 第一个节点保存元素的成员,第二个节点保存元素的分值。并且压缩列表内的集合元素按分值从小到大的顺序进行排列,小的放置在靠近表头的位置,大的放置在靠近表尾的位置。 1、保存的元素数量小于128; 2、保存的所有元素长度都小于64字节。 可以通过Redis配置文件zset-max-ziplist-entries 选项和 zset-max-ziplist-value 进行修改 |
REDIS_ENCODING_SKIPLIST | 跳表 |