2、数据结构

厨子大约 1 分钟数据库原创面试题Redis程序厨

2.数据结构

2.0 5 种数据表现形式

  • String字符串(主要用于常规计数,粉丝数等)

  • Hash散列(用户信息,商品信息等)

  • List 列表(消息列表,粉丝列表等)

  • Set 集合(共同好友,共同关注等)

  • SortedSet有序集合(礼物排行榜等)

以上是键值对的保存形式

推荐阅读:https://www.runoob.com/redis/redis-data-types.htmlopen in new window

2.1 6 种底层数据结构

共有六种

  • 简单动态字符串

  • 双向链表

  • 压缩列表

  • 哈希表

  • 跳表

  • 整数数组

img
img

简单动态字符串

SDS可以直接获取到字符串的长度,时间复杂度为O(1)

会有空间预分配,这样可以减少分配空间的次数,然后长度减少时,不会改变数据结构的内存,会将减少部位标志为可用。

C语言是以 /0结尾,Redis 以长度进行结尾,避免存储字符串出现问题

可以保存文本和二进制数据

双向链表

压缩列表

压缩原理

压缩数组
压缩数组

原理很简单,因为数组的内存是连续分配的,如果我们给所有的value分配相同的内存大小,这样的话则会造成大量的内存浪费,所以我们对每个value 的内存进行存储时,先计算出其大小,然后通过大小为其分配内存。

这个也是高频考点

哈希表

跳表

推荐阅读:https://zhuanlan.zhihu.com/p/53975333?ivk_sa=1024320uopen in new window

整数数组