首页/数据/Redis 进阶速查/intset 整数集合与 Set 内存
数据结构与选型42 条

intset 整数集合与 Set 内存

Set 里全是整数且数量不超过 set-max-intset-entries 时用 intset 存储:有序数组加二分查找,内存占用远低于哈希表。

Redis 进阶速查数据更新于 2026-10-12
编码intset → hashtable
阈值set-max-intset-entries,默认 512
查找intset 内为二分查找

示例

示例
redis-cli SADD ids 101 102 103
redis-cli OBJECT ENCODING ids      # intset
redis-cli SADD ids abc
redis-cli OBJECT ENCODING ids      # hashtable
intset 元素按数值升序存放,新增元素可能触发整块数组扩容重排;成员在 64 位整数范围内才保持 intset。

易错点

  • 插入一个非整数成员即永久转 hashtable,混合存 ID 与字符串的场景一开始就按 hashtable 估算内存
  • 成员超出 64 位有符号整数范围同样触发编码转换

数据来源与参考

  • Redis 官方文档:Sets 数据类型
  • Redis 源码 intset.c
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌