BitMap
- 通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。8个bit可以组成一个Byte,所以bitmap本身会极大的节省储存空间。
场景
一个网站用户签到,很多个用户,一年有365 天,每天都记录,数据量会非常大,统计比较困难。考虑到这种场景,使用 bitmap 节省很多空间。
命令
setbit: 保存
getbit: 获取
bitcount: 统计
应用
- 模拟一个一周打卡情况
key
用户名
127.0.0.1:6379> setbit xm 1 1
0
127.0.0.1:6379> setbit xm 2 1
0
127.0.0.1:6379> setbit xm 3 0
0
127.0.0.1:6379> setbit bmap 4 1
0
127.0.0.1:6379> setbit xm 5 0
0
127.0.0.1:6379> setbit xm 6 1
0
127.0.0.1:6379> setbit xm 7 1
0
127.0.0.1:6379>
127.0.0.1:6379> getbit xm 3
0
127.0.0.1:6379> getbit xm 6
1
127.0.0.1:6379> bitcount xm # 统计值为 1个数
4
127.0.0.1:6379>
- 模拟用户活跃度
key: 时间,
offset:用户id
value: 活跃情况
127.0.0.1:6379> setbit 20200808 1 1
0
127.0.0.1:6379> setbit 20200808 2 1
0
127.0.0.1:6379> setbit 20200808 3 0
0
127.0.0.1:6379> setbit 20200808 4 1
0
127.0.0.1:6379>
127.0.0.1:6379> setbit 20200809 1 0
0
127.0.0.1:6379> setbit 20200809 2 1
0
127.0.0.1:6379> setbit 20200809 3 1
0
127.0.0.1:6379>
127.0.0.1:6379> setbit 20200809 4 1
0
127.0.0.1:6379> # 统计时间内都有活跃用户 20200808{1,2,4} 20200809{2,3,4}
127.0.0.1:6379> bitop and active 20200808 20200809
1
127.0.0.1:6379> bitcount active # 统计时间被都有活跃用户个数
2
127.0.0.1:6379> bitop or totle_active 20200808 20200809 # 统计两天一共活跃用户
1
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> bitcount totle_active # 统计时间内有过活跃用户个数
4