文档:位字段

位字段允许您设置、递增和获取任意位长的整数值。例如,您可以操作从无符号1位整数到有符号63位整数的任何值。

这些值使用二进制编码的字符串存储。位字段支持原子读、写和增量操作,这使其成为管理计数器和类似数值的良好选择。

基本命令

  • BITFIELD 原子地设置、递增和读取一个或多个值。
  • BITFIELD_ROBITFIELD 的只读变体。

示例

假设您想为各种自行车维护两个指标:当前价格和随时间变化的拥有者数量。您可以为每辆自行车使用一个32位宽的位字段来表示这些计数器。

  • 自行车1最初售价1,000(偏移量0中的计数器),从未有过拥有者。售出后,它现在被视为二手车,价格立即下降以反映其新状态,并且现在有了一位拥有者(偏移量1)。一段时间后,这辆自行车成为了一款经典。原车主将其出售获利,因此价格上涨,拥有者数量也增加了。最后,您可以查看自行车的当前价格和拥有者数量。
127.0.0.1:6379> BITFIELD bike:1:stats SET u32 #0 1000
1) (integer) 0
127.0.0.1:6379> BITFIELD bike:1:stats INCRBY u32 #0 -50 INCRBY u32 #1 1
1) (integer) 950
2) (integer) 1
127.0.0.1:6379> BITFIELD bike:1:stats INCRBY u32 #0 500 INCRBY u32 #1 1
1) (integer) 1450
2) (integer) 2
127.0.0.1:6379> BITFIELD bike:1:stats GET u32 #0 GET u32 #1
1) (integer) 1450
2) (integer) 2

性能

BITFIELD 的时间复杂度为 O(n),其中 n 是访问的计数器数量。