1.字符串
字符串作为Redis中最基础的数据结构,他存储的值可以是任何东西,可以是字符串,数字,二进制,但是字符串存储的值不能超过512M
在Redis中字符串的底层编码是根据值进行改变的
- 当存储的字符串是一个数字的时候那么底层编码就是一个int
- 当存储的字符串是一个小于39字节的字符串是用的是短字符串而大于等于39字节时用的就是长字符串
2.哈希
在Redis中所有的数据都是以键值对的方式存储的,那么哈希在Redis中指的是值以键值对的方式进行存储
在Redis中哈希的底层编码是由ziplist和hashtable实现的
- 当哈希类型的元素小于512个并且存储的值小于64字节的时候使用的就是ziplist
- 反之使用的是hashtable
- 当存储的元素不满足ziplist的存储条件时**(元素小于512个并且存储的值小于64字节)**,此时读写效率就会下降,那么这个时候就会用hashtable来进行底层编码,使得读写效率变成 O(1)
ziplist
- ziplist的存储空间是一整块的,连续的空间,所有的元素都紧挨的,没有冗余的间隙。每当有元素要新增的时候,添加到ziplist的尾部
3.列表
Redis中列表是用于存储多个有序的字符串的,这些字符串被称作元素,一个列表最多可以存储2^32 - 1个元素。这些元素是有序的,同时这些元素也是可以重复的。
在列表中,底层编码是由ziplist和链表实现的
- 同样的, 当哈希类型的元素小于128个并且存储的值小于64字节的时候使用的就是ziplist
- 当存储的元素不满足ziplist的存储条件时就会使用链表进行底层编码
4.集合
与列表不同的是集合是用于存储多个无序的并且不能重复的元素
在集合中,底层是由整数集合和hashtable来实现的
- 当存储到元素小于512个并且元素都是整数的时候,使用的就是整数集合进行底层编码
- 当不满足整数集合的存储条件的时候就会使用hashtable进行底层编码,此时hashtable的键就是我们存储的元素,而值则都为null
5.有序集合
相比较与集合,有序集合增加了分数,帮助集合来进行排序操作,提供了指定分数,元素范围查询,计算排名等等操作
在有序集合中,底层编码是由ziplist和跳表进行实现的
- 还是一样,当存储的元素小于128个并且存储的值小于64字节的时候使用的就是ziplist
- 反之就使用跳表进行底层编码,时间复杂度为O(logN)