Redis 位图 bitmap的使用

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 对应当天是否登录



作者:一个头发茂密的程序员
链接:https://www.jianshu.com/p/4c1292264b30

相关资源:

GitOps 初探

mysql教程

 Python入门基础教程全套

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值