Bitmap(位图)
Bitmap(位图)是一种基于字符串(String)类型的特殊数据结构,通过二进制位(bit)的数组形式存储数据,每个位只能为0或1。它适用于处理大规模二值状态(如存在/不存在、是/否)的场景,具有极高的空间效率和快速位操作能力。其底层是基于String 类型实现的。
注:
Bitmap的操作是原子性的, 适用于高并发场景, 时间复杂度为O(1)或O(N)Bitmap支持使用位运算处理复杂逻辑处理
常用命令
SETBIT
设置指定 key 中偏移量对应的二进制位值, 返回值为操作前该位的原始值
语法:
SETBIT key offset value
参数:
offset:位的偏移量(从 0 开始,最大支持 2^32-1,即约 42.9 亿位)。value:值,仅允许 0 或 1。
注:首次设置大偏移量时,Redis 会预分配内存(如 512MB 对应偏移量 2^32-1),可能导致短暂阻塞
GETBIT
获取指定键中偏移量对应的二进制位值
语法:
GETBIT key offset
BITCOUNT
统计字符串(底层实现为 Bitmap)中二进制位值为 1 的总数量。不存在的 key 被视为空字符串,因此该命令将返回 0 。
语法:
BITCOUNT key [start end [BYTE | BIT]]
参数:
- BYTE: 默认,将
start和end解释为字节偏移量,每个字节包含 8 位。 - BIT: 将
start和end解释为位偏移量,直接定位到二进制位的具体位置。
BITTOP
在多个key(包含字符串值)和之间执行按位操作 将结果存储在目标key中。
-
AND(逻辑与)
所有输入位图中对应位均为1时,结果位为 1
典型场景:统计多日连续活跃用户, 如:
BITOP AND 7days_sign day1 day2... -
OR(逻辑或)
任意输入位图中对应位为1时,结果位为 1
典型场景:合并多日活跃用户
BITOP OR week_activity day1 day2... -
XOR(逻辑异或)
输入位图中对应位不同时,结果位为1。
典型场景:检测用户行为差异(如新老用户行为对比)。 -
NOT(逻辑非)
对单个输入位图所有位取反。
典型场景:筛选未活跃用户(如)
BITOP NOT inactive_users active_users
语法:
BITOP <AND | OR | XOR | NOT> destkey key [key ...]
参数:
operation:必选,支持AND/OR/XOR/NOT。destkey:必选,存储运算结果的键名。key1 key2...:参与运算的键(NOT仅支持单键)。
较短字符串的缺失部分视为
0,空键视为全0序列若目标键
destkey已存在,其原有内容会被覆盖;若不存在,Redis 会根据最长输入键预分配内存
826

被折叠的 条评论
为什么被折叠?



