📄️ Redis字符串底层数据结构?
在 Redis 中,没有使用 C 标准库提供的字符串,而是实现了一种名为简单动态字符串(SDS, Simple Dynamic String)的数据结构来表示字符串。SDS 由长度(len)、内存空间大小(alloc)、字符串类型(flags)和存储的字节数组(buf)四个部分组成。
📄️ Redis的ZSet底层是怎么实现的?
在数据量比较小的时候,Redis 会使用压缩列表作为实现方式。另一种实现方式是跳表+字典,这种实现用于处理较大的数据集。在这种实现方式中,Redis 使用跳表的节点保存指向 member 的指针和 score,同时又使用了字典保存 member 和 score 之间的对应关系,以便同时实现高效的随机查找和范围查找。
📄️ Redis的压缩列表是什么?
Redis 的压缩列表是List、Hash 和 ZSet 这三种数据结构的底层实现之一。它由一段连续的内存块组成,每一小段内存都对应一个节点。相对传统的链表,它不使用指针而使用内存偏移量记录节点间的相对关系。
📄️ Redis的跳表是什么?
跳表是 ZSet 的底层实现之一,它是一种包含多级链表的数据结构,它允许通过额外的索引层来实现快速查找,实现 O(logN) 的平均复杂度。Redis 的跳表节点里面保存了 score 和 member,所有的节点都按照 score 排序,而当 score 相同时,会再按照 member 的字典顺序进行排序。