一、Redis 的底层数据结构
Redis 的底层数据结构一共有6种,分别SDS 简单动态字符串、双向链表、压缩链表、哈希表、跳表和整数数组。
二、键和值用什么结构组织?
为了实现从键到值的快速访问,Redis 使用了一个全局哈希表来保存所有的键值对。每个哈希桶中的 entry 元素保存了指向实际键和值的指针。
1.如何解决哈希冲突?
2.渐进式 rehash
为了避免某些哈希冲突链过长,导致在这个链表上进行元素查找时效率地下,Redis 会对 hash 表做 rehash 操作。
同时,为了避免一次性拷贝造成的长时间阻塞,Redis 采用渐进式 rehash,每处理一个客户端的请求,就将哈希表1一个索引位置上的所有 entries 拷贝到哈希表2中。这样就将一次性大量拷贝的开销,分摊到了多次处理请求的过程中,保证了数据的快速访问。
三、不同数据结构的时间复杂度
单元素操作是基础;
范围操作非常耗时;
统计操作通常高效;
例外情况只有几个。