一、基础概念
Redis 的 BitMap 本质是 String 字符串类型,不是独立数据结构。
- 最大容量:512M,对应 \(2^{32}\) 个 bit 位
- 核心思想:一个 bit 位只存 0 / 1,用偏移量 offset 映射业务对象,节省存储空间
典型场景:用户按月签到,offset 代表当月第几天,1 = 签到,0 = 未签到
二、核心命令汇总
表格
| 命令 | 作用 |
|---|---|
SETBIT key offset value |
在指定偏移 offset 位置,写入 0 或 1 |
GETBIT key offset |
获取指定 offset 位置的 bit 值 |
BITCOUNT key [start end] |
统计 key 里值为 1 的 bit 数量(签到总次数) |
BITFIELD |
批量查询 / 修改 / 自增多个 bit 位 |
BITFIELD_RO |
只读版本,批量读取 bit 数组,返回十进制 |
BITOP op destkey key1 key2... |
多 Bitmap 做位运算:AND 与、OR 或、XOR 异或,结果存入 destkey |
BITPOS key bit [start end] |
在指定范围查找第一个 0 或者 1 所在的 offset 位置 |
三、业务案例:用户按月签到
key 设计:sign:userId:年月,例如 sign:zhangsan:202201
- offset = 日期 - 1(第 1 天 offset=0,第 31 天 offset=30)
- 用户 1 月 5 号签到:
SETBIT sign:zhangsan:202201 4 1 - 查询 5 号有没有签到:
GETBIT sign:zhangsan:202201 4 - 统计 1 月一共签到多少天:
BITCOUNT sign:zhangsan:202201