Redis 系列 整数集合

开启 redis 探索新篇章

Posted by lichao modified on December 24, 2019

Redis 的 intset 是一个紧凑的整数数组结构,它用于存放元素都是整数的并且元素个数较少的 set 集合。

整数集合

如果整数可以用 uint16 表示,那么 intset 的元素就是 16 位的数组,如果新加入的整数超过了 uint16 的表示范围,那么就使用 uint32 表示,如果新加入的元素超过了 uint32 的表示范围,那么就使用 uint64 表示,Redis 支持 set 集合动态从 uint16 升级到 uint32,再升级到 uint64。

1
2
3
4
5
struct intset<T> {
  int32 encoding;  // 决定整数位宽是 16 位、32 位还是 64 位
  int32 length;    // 元素个数
  int<T> contents; // 整数数组,可以是 16 位、32 位和 64 位
}