Redis 位图 bitmap的使用
2021-09-22 本文已影响0人
一个头发茂密的程序员
bitCount 解决时间窗口统计用户登录天数
SETBIT key offset value
summary: Sets or clears the bit at offset in the string value stored at key
since: 2.2.0
group: string
BITCOUNT key [start end]
summary: Count set bits in a string
since: 2.6.0
group: string
bitcount 是用来统计二进制位中1的个数的
由此我们可以通过bitmap 来存储用户登录天数,1代表用户登录,设一年有400天的话,一个字节是8个二进制位,400天用50个字节就可以存储一年一个用户的登录信息了。
所以我们就可以这样来存储:
setbit zhangsan 1 1
setbit zhangsan 2 1
setbit zhangsan 364 1
/*
用 1 来表示该天登录了
第几天: 1 2 3 。。。。。
zhangsan: 0 1 1 。。。。
*/
bitcount zhangsan 0 -1
/*
统计张三当年登录天数
*/
bitcount zhansan -2 -1
/*
统计张三最后两周登录天数
*/
getbit zhangsan 364
/*
如果要精确的进行统计查看第364天是否登录了
*/
/*
如果对天精准存储 可以用下面的方式
*/
key: 用户名/用户ID value:该天是否登录
setbit 的offset 指的是二进制中的索引,getbit也是
bitcount 中的 start 和 end 指的是字节的索引
bitop 检测 随机窗口内活跃用户的统计
BITOP operation destkey key [key ...]
summary: Perform bitwise operations between strings
since: 2.6.0
group: string
可以用key来存储日期,用1来存储某一用户该天是否登录
zhangsan lisi wangwu ..........
20210918 0 1 1 ..........
20210919 0 1 0 ..........
20210920 1 1 0 ..........
/*
统计20210918和20210919和 20210920三天连续登录
*/
bitop and andkey 20210918 20210919 20210920
bitcount andkey
/*
统计连续三天登录人数
*/
··
key:日期 value: 每一个用户名/用户ID 对应当天是否登录