星海

Redis · 单选题 · 第 46 题

Java 后端开发面试 · 第 46 题

Redis 7 中有序集合(ZSet)的底层编码是?

  1. A元素少时用紧凑的 listpack,元素多时改用跳表加哈希表
  2. B始终使用红黑树,按分值排序,同时支持范围查询和排名
  3. C始终使用 B+ 树,叶子节点串成链表,便于顺序遍历
  4. D只使用哈希表存储,范围查询时再临时排序后返回结果

答案

A A. 元素少时用紧凑的 listpack,元素多时改用跳表加哈希表

解析

元素数量和长度都低于阈值(zset-max-listpack-entries 默认 128、zset-max-listpack-value 默认 64)时,用 listpack 节省内存;Redis 7 之前对应的是 ziplist。超过阈值后改用跳表加字典:字典支持 O(1) 按成员查分值,跳表支持按分值范围查询和排名。选跳表而不是红黑树,是因为跳表实现简单,范围遍历也方便。

在线刷这套题:即时判分、错题本、闪卡复习,不用登录就能练。