目录
3.7 Redis位图(bitmap)
概念
需求
是什么
说明
能干嘛?
基本命令
3.7 Redis位图(bitmap)
概念
由0和1状态表现的二进制位的bit数组
需求
-
用户是否登陆过?Y / N
-
广告是否被点击过?
-
钉钉打卡上下班,签到统计
是什么
说明
用String类型作为底层数据结构实现的一种统计二值状态的数据类型
位图本质是数组,它是基丁String数据类型的按位的操作。该数组由多个二进制位组成,每个二进制位都对应一个偏移量(我们称之为一个索引)。 Bitmap支持的最大位数是2^32位,它可以极大的节约存储空间,使用512M内存就可以存储多达42.9亿的字节信息(2^32 = 4294967296)
能干嘛?
用于状态统计,Y、N,类似AtomicBoolean
基本命令
-
setbit key offset value
setbit 键 偏移量 -->只能零或者1
Bitmap 的偏移量是从零开始计算的
setbit k1 1 1 setbit k1 2 1 setbit k1 3 1 setbit k1 3 0 sype k1 #输出 string --> setbit的底层是string
-
getbit
getbit k1 0 #输出 0 getbit k1 1 #输出 1 getbit k1 2 #输出 1 getbit k1 3 #输出 1
-
strlen
统计字节数占用多少
不是字符串长度而是占据几个字节,超过8位后自己按照8位一组一byte再扩容
setbit k2 0 1 setbit k2 7 1 strlen ke #输出 1 setbit k2 8 1 strlen ke #输出 2
-
bitcount
全部键里含有1的有多少个?
setbit uid:login123 1 1 setbit uid:login123 2 1 setbit uid:login123 3 1 bitcount uid:login123 #输出 3
-
bitop
bit位的运行操作
连续签到两天
HSET uid: map o uid-092iok-lkj HSET uid: map 1 uid-7388c-xxx HGETALL uid: map #输出 0 uid-092iok-lkj 1 uid-7388c-xxx
-
setbit 和 getbit 案例说明
考勤系统