Redis 数据保存形式:String 、List、Hash、Set、Sorted Set
底层数据结构分为:简单动态字符串、双向链表、压缩列表、哈希表、跳表和整数数组。
String | List | Hash | Sorted Set | Set |
简单动态字符串 | 双向链表、压缩列表 | 压缩列表、哈希表 | 跳表、压缩列表 | 哈希表、整数数组 |
Redis 使用了一个哈希表来保存所有键值对。 哈希表又称全局哈希表。
一个哈希表由多个哈希桶组成。 而哈希桶保存的不是值本身,而是指向具体值的指针。
Redis 解决哈希冲突 - > 链式哈希。 (rehash)
String 类型 : 找到哈希桶就能执行操作。 O(1)
集合类型(List 、hash 、set 、sort Set)找到哈希桶,还要在集合再进一步操作。
集合类 有五种类型: 其中 压缩列表:表头有三个字段:zlbytes、zltail 和zllen。 分别表示 长度、列表尾的偏移量和列表中的entry个数。 表尾有一个zlend 表示列表结束.
zlbytes | zltail | zllen | entry1 | Entry2 | …. | entryN | Blend |
跳表: 在链表的基础上,增加了多级索引、通过索引位置的几个跳转,实现数据的快速定位,
一级索引 | 1 | -> | 11 | -> | 27 |
-> | -> | -> | |||
二级索引 | 1 | 5 | 11 | 20 | 27 |
-> | -> | ||||
11 | 20 | 27 |
时间复杂度
哈希表 | O(1) |
跳表 | O(logN) |
双向链表 | O(N) |
压缩列表 | O(N) |
整数数组 | O(N) |