后端岗位面试题更新 2026-08-05

请介绍 Redis 中有序集合 Zset 底层数据结构的实现原理。

后端开发技术原理方案权衡Redis

考察说明

考查对 Redis Zset 底层编码方式(ziplist/skiplist+hashtable)及跳表机制的理解。

回答思路

  1. 【回答框架 1】Zset 在 Redis 中根据元素数量和单个元素大小选择底层编码,默认当元素数量小于128且所有元素最大长度小于64字节时使用压缩列表(ziplist),超出后转为跳跃表加哈希表(skiplist+hashtable)。压缩列表是一块连续内存,按分值升序存储成员和分值,查找需遍历,O(N)。
  2. 【回答框架 2】跳表是一种多层级有序链表,每一层是底层链表的一个子集,通过随机层级决定节点的层数。Zset 使用跳表按分值有序存储成员,同时配套一个哈希表存储成员到分值的映射,保证按成员查找分值时 O(1) 复杂度。跳表查找、插入、删除平均时间复杂度 O(log N)。
  3. 【回答框架 3】跳表相比平衡树实现简单、范围查询方便,Redis 选择跳表而非红黑树,因为跳表在区间操作(如 ZRANGEBYSCORE)上性能好且代码易维护。哈希表用于快速定位成员,跳表维护有序性,两者共同支撑 Zset 的多种操作。
  4. 【关键点 1】Zset 底层在元素少时用 ziplist,元素多时用 skiplist+hashtable。
  5. 【关键点 2】跳表实现有序性,哈希表实现成员到分值的 O(1) 映射。
  6. 【关键点 3】跳表操作平均时间复杂度 O(log N),适合范围查询。
  7. 【易错点 1】不要忽略 ziplist 转跳表的触发条件(元素个数和元素大小阈值)。
  8. 【易错点 2】跳表和哈希表是配合使用,而不是互相替代。