Redis的五种常用数据结构以及其底层实现

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和链表实现的

  • 同样的, 当哈希类型的元素小于512个并且存储的值小于64字节的时候使用的就是ziplist
  • 当存储的元素不满足ziplist的存储条件时就会使用链表进行底层编码

4.集合

列表不同的是集合是用于存储多个无序的并且不能重复的元素

在集合中,底层是由整数集合和hashtable来实现的

  • 当存储到元素小于512个并且元素都是整数的时候,使用的就是整数集合进行底层编码
  • 当不满足整数集合的存储条件的时候就会使用hashtable进行底层编码,此时hashtable的键就是我们存储的元素,而值则都为null

5.有序集合

相比较与集合,有序集合增加了分数,帮助集合来进行排序操作,提供了指定分数,元素范围查询,计算排名等等操作

在有序集合中,底层编码是由ziplist和跳表进行实现的

  • 还是一样,当存储的元素小于512个并且存储的值小于64字节的时候使用的就是ziplist
  • 反之就使用跳表进行底层编码,时间复杂度为O(logN)

你可能感兴趣的:(Redis,redis,数据结构,数据库)