Redis的数据类型总结
String有三种编码方式:
int(整数型,直接以RedisObject存储)、
List的编码方式有ZipList(压缩列表——可类比数组,压缩列表的内存块是连续的,并分配内存的次数一次即可,也就是类似于embstr,内存只分配一次)、Linkedlist(一个双向不循环链表)
当列表对象同时满足以下两个条件时,列表对象使用ziplist进行存储,否则使用linkedlist存储
-
列表对象保存的所有字符串元素的长度小于64字节
-
列表对象保存的
编码方式有ZipList、HashTable,ziplist编码的哈希对象底层实现是压缩列表,hashtable底层实现是字典,哈希对象中的每个key-value对都使用一个字典键值对来保存。字典键值对即是,字典的键和值都是字符串对象,字典的键保存key-value的key,字典的值保存key-value的value。
4:Set:
-
集合对象的编码可以是intset和hashtable之一。从名称就可以知道,IntSet即为整数类集合对象
intset编码的集合对象底层实现是整数集合,所有元素都保存在整数集合中。IntSet底层实现是有序集合,集合对象使用intset编码需要满足两个条件:一是所有元素都是整数值;二是元素个数小于等于512个;不满足任意一条都将使用hashtable编码。
intset 使用一个唯一且有序排列的数组来保存元素,在查找时使用二分查找,支持类型升级
hashtable编码的集合对象底层实现是字典,字典的每个键都是一个字符串对象,保存一个集合元素,不同的是字典的值都是NULL;可以参考java中的hashset结构。
编码方式有 ziplist和skiplist
浙公网安备 33010602011771号