redis中的bitmap类型和常用命令详解

Bitmap(位图)

Bitmap(位图)是一种基于字符串(String)类型的特殊数据结构,通过二进制位(bit)的数组形式存储数据,每个位只能为01。它适用于处理大规模二值状态(如存在/不存在、是/否)的场景,具有极高的空间效率和快速位操作能力。其底层是基于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: 默认,将 startend 解释为字节偏移量,每个字节包含 8 位。
  • BIT: 将 startend 解释为位偏移量,直接定位到二进制位的具体位置。

BITTOP

在多个key(包含字符串值)和之间执行按位操作 将结果存储在目标key中。

  1. AND(逻辑与)

    所有输入位图中对应位均为1时,结果位为 1

    典型场景:统计多日连续活跃用户, 如:

    BITOP AND 7days_sign day1 day2...
    
  2. OR(逻辑或

    任意输入位图中对应位为1时,结果位为 1

    典型场景:合并多日活跃用户

    BITOP OR week_activity day1 day2...
    
  3. XOR(逻辑异或)
    输入位图中对应位不同时,结果位为 1
    典型场景:检测用户行为差异(如新老用户行为对比)。

  4. 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 会根据最长输入键预分配内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值