首页/数据/Redis 进阶速查/ZSet 跳表编码与内存拐点
数据结构与选型42 条

ZSet 跳表编码与内存拐点

有序集合在元素少且小时用 listpack,超过 zset-max-listpack-entries(默认 128)或成员超过 zset-max-listpack-value(默认 64 字节)后转为 skiplist 与哈希表组合。

Redis 进阶速查数据更新于 2026-10-12
编码listpack → skiplist
配置zset-max-listpack-entries / zset-max-listpack-value
复杂度插入与查找 O(log N)

示例

示例
redis-cli ZADD rank 100 alice 99 bob
redis-cli OBJECT ENCODING rank
redis-cli CONFIG GET zset-max-listpack-*
转 skiplist 后每个成员同时存在于跳表与字典,内存上升明显,排行榜类大 key 建议按维度拆分。

易错点

  • 成员是长字符串时会立刻触发编码切换:控制成员长度比调阈值更有效
  • ZADD 批量写入超大 ZSet 时单命令阻塞时间长,需要分批写入

数据来源与参考

  • Redis 官方文档:Sorted Sets 数据类型
  • redis.conf:zset-max-listpack-entries 注释
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌