type
Post
status
Published
date
Dec 12, 2021
slug
summary
介绍 Bitmap 类型基本命令和使用场景
tags
Redis
category
技术分享
icon
password
BitMap 也叫位图
- 二值统计:集合元素的取值就只有0和1两种,通常用于状态的统计
例如:登录情况、打卡情况、日活统计等
原理
本质是由 0 和 1 两种状态表现组成的二进制位的bit数组,但底层使用 Redis/String 类型实现
- 存储时,实际存储的是一个 8bit bitmap 代表的 ASCII 码所对应的字符
- 使用 get 指令可以获得这个 二进制位对应的 ASCII 码符号

基本指令
setbit key offset value- offset 位偏移,每八位一个byte 作为 bitmap,自动扩容
- value 值只能是 0 或 1

getbit key offset
strlen- 统计共占有的字节数(byte)
- 长度不是字符串长度,而是byte 数
- 超过 8 位后,就按 8 位扩容
bitcount key [start] [end]- 统计这个键里面的位 1 的个数
bitop [operation] destkey key- 对多个 key 的二进制数据进行位运算
- [operation] 可取的二进制操作符 :AND、OR、NOT、XOR
场景案例
记录用户月签到数据
- 记录九月第一天签到
setbit checkin:uid63:202109 0 1
- 查看九月第一天签到情况
getbit checkin:uid63:202109 0
统计日活月活
- 对每个用户 id 做一个全局的 id-位置映射
- 位置为 1 的用户当天访问过:
setbit 20210101 1 1
- 当天日活:
BITCOUNT 20210101
- 连续登录的用户位:
BITOP and destkey 202101015 202101016
Relate Posts