Bitmap 是 Redis 中的一种数据结构,用于表示位图(bit array
)。
它通常用于处理大规模数据集中每个元素的状态,比如用户的在线/离线状态(每个用户对应一个位,表示在线(1)或离线(0))、用户签到情况(每天对应一个位,用户当天签到则将该位设为 1)、某个事件的发生情况等。
在 Redis 中,Bitmap 被实现为一个二进制字符串,其中每个位(bit)都可以被设置或清除。
这使得 Bitmap 可以非常高效地表示大量的布尔值。
将指定偏移量上的位设置为给定值(0 或 1)。
SETBIT key offset value
设置指定键(key)的位图(bitmap)中,特定偏移量(offset)处的位值(value)。
SETBIT
命令会设置位图中指定偏移量的位的值为指定的值(0或1)。SETBIT
命令返回设置前偏移量指定位的原始值(0或1)。假设有一个键名为 user:123:online
,用于表示在线状态的位图:
SETBIT user:123:online 0 1
将位图 user:123:online
中偏移量为0的位设置为1,表示用户123现在在线。
获取指定偏移量上的位的值(0 或 1)。
GETBIT key offset
是 Redis 中用于获取指定键的位图中,特定偏移量处的位值的命令。
GETBIT
命令返回0。GETBIT
命令返回指定偏移量的位的值,可以是0或1。假设有一个键名为 user:123:online
,用于表示在线状态的位图:
GETBIT user:123:online 0
这个命令将返回位图 user:123:online
中偏移量为0的位的当前值,表示用户123是否在线(0表示离线,1表示在线)。
统计指定范围内的位为 1 的数量。
BITCOUNT key [start end [BYTE | BIT]]
是 Redis 中用于计算指定键的位图中,从 start 偏移量到 end 偏移量之间的所有位的数量的命令。
BITCOUNT
命令会统计整个位图中所有位的数量。假设有一个键名为 user:123:online
,用于表示在线状态的位图:
BITCOUNT user:123:online
这个命令将返回位图 user:123:online
中所有位的数量,即用户123的在线状态记录数。
BITCOUNT user:123:online 0 10 BIT
这个命令将返回位图 user:123:online
中从偏移量0到10的位的数量。
对一个或多个 Bitmap 进行位操作,并将结果保存到 destkey 中(支持 AND、OR、XOR、NOT 等操作)。
BITOP
是 Redis 中用于对多个位图执行位操作的命令。
destkey
中。destkey
中。destkey
中。destkey
中。NOT
操作只能对单个位图执行,对给定的位图取反后存储到目标位图中。destkey
中设置的位数,即操作后目标位图中为1的位的数量。假设有两个位图键名为 user:123:online
和 user:456:online
,用于表示用户的在线状态:
BITOP AND user:allonline user:123:online user:456:online
命令将对 user:123:online
和 user:456:online
进行按位与操作,并将结果存储到 user:allonline
中,表示同时在线的用户。
BITOP OR user:anyonline user:123:online user:456:online
命令将对 user:123:online
和 user:456:online
进行按位或操作,并将结果存储到 user:anyonline
中,表示任意在线的用户。
BITOP NOT user:123:offline user:123:online
命令将对 user:123:online
进行按位非操作,并将结果存储到 user:123:offline
中,表示用户123的在线状态取反。
寻找第一个或最后一个被设置为给定值的位的位置。
BITPOS
是 Redis 中用于查找位图中指定位的位置的命令。
BITPOS
命令用于在位图中查找指定位的位置。可以指定开始和结束的偏移量来限制搜索范围。BITPOS
将返回位图中第一个出现的 1 的位置;当指定 bit 为 0 时,BITPOS
将返回位图中第一个出现的 0 的位置。假设有一个键名为 user:123:permissions
,用于表示用户权限的位图:
SETBIT user:123:permissions 0 1
SETBIT user:123:permissions 3 1
SETBIT user:123:permissions 7 1
这个命令将创建一个位图 user:123:permissions
,并将偏移量0、3和7的位设置为1。
BITPOS user:123:permissions 1
命令将返回位图 user:123:permissions
中第一个出现的 1 的位置,即偏移量0。
BITPOS user:123:permissions 1 2
命令将在偏移量2之后的范围内查找第一个出现的 1,由于在此范围内没有 1,因此返回 -1。
BITPOS user:123:permissions 0 1 BYTE
命令将以字节为单位,在偏移量1之前的范围内查找第一个出现的 1 的位置。
BITPOS
命令适用于需要确定位图中特定位的位置的场景,例如查找权限位、统计事件发生位等。更多命令可以去官网查看哦~https://redis.io/docs/latest/commands/?group=bitmap