Redis-Bitmap位图及其常用下令详解
1.Redis概述https://img-blog.csdnimg.cn/direct/5ba552ffabdc4fceb8e4008727cb7639.png
2.Bitmap
[*] Bitmap 是 Redis 中的一种数据结构,用于表示位图(bit array)。
[*] 它通常用于处置处罚大规模数据集中每个元素的状态,比如用户的在线/离线状态(每个用户对应一个位,表示在线(1)或离线(0))、用户签到情况(每天对应一个位,用户当天签到则将该位设为 1)、某个事件的发生情况等。
Bitmap 数据结构
[*] 在 Redis 中,Bitmap 被实现为一个二进制字符串,此中每个位(bit)都可以被设置或清除。
[*] 这使得 Bitmap 可以非常高效地表示大量的布尔值。
Bitmap 下令
1. SETBIT
将指定偏移量上的位设置为给定值(0 或 1)。
https://img-blog.csdnimg.cn/direct/825f107d2513405ca4a4be2b6e03c4d7.png
SETBIT key offset value 设置指定键(key)的位图(bitmap)中,特定偏移量(offset)处的位值(value)。
[*]key: Redis中的键,表示位图地点的位置。
[*]offset: 位图中的偏移量,即要设置的位的位置。偏移量从0开始,表示位图的第一个位。
[*]value: 要设置的位的值,只能是0或1。
Tips:
[*]如果键不存在,则会创建一个新的字符串值,此中包罗足够的位数以包罗偏移量指定的位。
[*]SETBIT 下令会设置位图中指定偏移量的位的值为指定的值(0或1)。
[*]如果偏移量超过当前字符串值的长度,Redis会主动扩展字符串以包罗足够的位数。
返回值
[*]SETBIT 下令返回设置前偏移量指定位的原始值(0或1)。
示例
假设有一个键名为 user:123:online,用于表示在线状态的位图:
SETBIT user:123:online 0 1
将位图 user:123:online 中偏移量为0的位设置为1,表示用户123如今在线。
https://img-blog.csdnimg.cn/direct/76e357ac7f1a4a65bc430271f21ae95b.png
2. GETBIT
获取指定偏移量上的位的值(0 或 1)。
https://img-blog.csdnimg.cn/direct/be8f86c8b3714e58bf2c979b5ea03df0.png
GETBIT key offset 是 Redis 中用于获取指定键的位图中,特定偏移量处的位值的下令。
[*]key: Redis 中的键,表示位图地点的位置。
[*]offset: 位图中的偏移量,即要获取位值的位置。偏移量从0开始,表示位图的第一个位。
Tips:
[*]如果键不存在,大概偏移量超出了当前字符串值的长度,GETBIT 下令返回0。
[*]GETBIT 下令返回指定偏移量的位的值,可以是0或1。
返回值
[*]返回值为偏移量处位的当前值(0或1)。
示例
假设有一个键名为 user:123:online,用于表示在线状态的位图:
GETBIT user:123:online 0
这个下令将返回位图 user:123:online 中偏移量为0的位的当前值,表示用户123是否在线(0表示离线,1表示在线)。
https://img-blog.csdnimg.cn/direct/216fc246edc34dd789fdc490ca49e498.png
3. BITCOUNT
统计指定范围内的位为 1 的数量。
https://img-blog.csdnimg.cn/direct/f088825ad94a459d9750142dd697b147.png
BITCOUNT key ] 是 Redis 中用于计算指定键的位图中,从 start 偏移量到 end 偏移量之间的全部位的数量的下令。
[*]key: Redis 中的键,表示位图地点的位置。
[*]start: 指定的起始偏移量。
[*]end: 指定的竣事偏移量。
[*]BYTE | BIT: 可选参数,用于指定单位是字节(BYTE)还是位(BIT)。默认为 BIT。
Tips
[*]如果不加任何参数,默认情况下,BITCOUNT 下令会统计整个位图中全部位的数量。
[*]可以通过指定 start 和 end 参数来计算位图中特定范围内的位的数量。
[*]通过添加 BYTE 参数,可以将 start 和 end 参数表明为字节偏移量而不是位偏移量。
返回值
[*]返回值为指定范围内(或整个位图)的位的数量。
示例
假设有一个键名为 user:123:online,用于表示在线状态的位图:
BITCOUNT user:123:online
这个下令将返回位图 user:123:online 中全部位的数量,即用户123的在线状态记录数。
BITCOUNT user:123:online
0 10 BIT 这个下令将返回位图 user:123:online 中从偏移量0到10的位的数量。
https://img-blog.csdnimg.cn/direct/f48beacdfd9d4206be053f6760ef7782.png
4. BITOP
对一个或多个 Bitmap 进行位操纵,并将结果保存到 destkey 中(支持 AND、OR、XOR、NOT 等操纵)。
https://img-blog.csdnimg.cn/direct/987910e5249e40a7bf2d10445b3b5c7b.png
BITOP <AND | OR | XOR | NOT> destkey key 是 Redis 中用于对多个位图执行位操纵的下令。
[*]AND: 对全部给定位图执行按位与操纵,并将结果存储到目标位图 destkey 中。
[*]OR: 对全部给定位图执行按位或操纵,并将结果存储到目标位图 destkey 中。
[*]XOR: 对全部给定位图执行按位异或操纵,并将结果存储到目标位图 destkey 中。
[*]NOT: 对单个给定位图执行按位非操纵,并将结果存储到目标位图 destkey 中。
参数分析
[*]destkey: 目标位图的键名,用于存储操纵结果。
[*]key : 要执行位操纵的一个或多个位图键名。
Tips
[*]位操纵下令允许将多个位图合并或修改为新的位图。
[*]操纵的位图可以是相同长度的位图,也可以是不同长度的位图,Redis 会主动对较短的位图进行扩展。
[*]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的在线状态取反。
5. BITPOS
寻找第一个或最后一个被设置为给定值的位的位置。
https://img-blog.csdnimg.cn/direct/0520e6d40aa044aea51a185328615b76.png
BITPOS 是 Redis 中用于查找位图中指定位的位置的下令。
[*]key: Redis 中的键,表示要查找的位图。
[*]bit: 要查找的位的值,可以是 0 或 1。
[*]start: 可选参数,指定开始查找的偏移量,默认为 0。
[*]end: 可选参数,指定竣事查找的偏移量,默认为最后一个位。
[*]BYTE | BIT: 可选参数,用于指定按字节还是按位查找,默认为 BIT。
Tips
[*]BITPOS 下令用于在位图中查找指定位的位置。可以指定开始和竣事的偏移量来限定搜刮范围。
[*]当指定 bit 为 1 时,BITPOS 将返回位图中第一个出现的 1 的位置;当指定 bit 为 0 时,BITPOS 将返回位图中第一个出现的 0 的位置。
[*]可以通过指定 BYTE 参数来将偏移量表明为字节而不是位。
返回值
[*]返回值为指定位图中指定位的位置,如果没找到对应的位,则返回 -1。
示例
假设有一个键名为 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
https://img-blog.csdnimg.cn/direct/a332fde4d9544bdf9ca0bee353050cc8.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]