redis
什么是位图bitmaps?
Redis Bitmaps 是 Redis 提供的基于字符串类型(string)实现的位图功能,本质是将字符串的每个字节拆分为 8 个二进制位(bit),通过位操作(设值、取值)实现 “用 bit 存储数据状态”。 # 将 key 对应偏移量 offset 的 bit 设为 1/0 SETBIT key offset value # 获取 key 对应偏移量 offset 的 bit 值(1/0) GETBIT key offset # 统计 key 中值为 1 的 bit 个数(可选字节范围 start-end) BITCOUNT key [start end] # 对多个 key 做位运算(op 为 AND/OR/XOR/NOT),结果存到 destkey BITOP op destkey key1 [key2...] # 查找 key 中第一个值为 1/0 的 bit 偏移量 BITPOS key value [start end]
❒ 使用 SETBIT 时,若 offset 远超当前字符串长度,Redis 会怎么处理? ✔ Redis 会自动 “扩展字符串长度”,以覆盖目标 offset,扩展出的空白部分(原字符串长度到 offset 之间的 bit)会被设为 0。 ❒ Redis Bitmaps 的局限性有哪些? ✔ 仅支持整数 ID ✔ 偏移量过大导致内存浪费 ✔ 位运算的性能瓶颈:对超大规模 Bitmaps(如 1GB 大小)执行 BITOP 或 BITCOUNT,会占用较多 CPU 和网络资源,需控制操作频率(可拆分到非峰值时段执行)