Redis

洞悉Redis技术内幕:缓存,数据结构,并发,集群与算法
帅旋
关注
充电
IT宅站长,技术博主,共享单车手,全网id:arthinking。

Redis应用之BitMap:每日签到统计

发布于 2021-06-16 | 更新于 2024-03-03

很多网站为了保持用户的活跃,都会搞签到活动,每日签到一次送金币啥的。

也许你会想到把签到状态放到一个HashMap中,标识用户已签到,但是随着用户数越来越多,我们就要寻找更加节省内存的存储结构了,这个时候,BitMap就派上用场了。

以下是记录某一天签到记录的例子:

1
2
3
4
5
6
7
8
9
10
# 通过 sign:20210525 记录5月25日的签到的用户记录
127.0.0.1:6379> SETBIT sign:20210525 10010 1
0
127.0.0.1:6379> SETBIT sign:20210525 10086 1
0
127.0.0.1:6379> SETBIT sign:20210525 99980 1
0
# 统计5月25日的前导记录
127.0.0.1:6379> BITCOUNT sign:20210525
3

以下是统计连续两天签到的用户记录数:

1
2
3
4
5
6
7
127.0.0.1:6379> SETBIT sign:20210526 10010 1
0
# 通过与操作获取连续两天都签到的用户数
127.0.0.1:6379> BITOP AND result sign:20210525 sign:20210526
12498
127.0.0.1:6379> BITCOUNT result
1

image-20211010135812869

如果用户的标识比较复杂,不能直接作为BitMap的偏移量,或者用户标识已经超过了Redis的BitMap能够存储的范围,我们可以进一步使用BloomFilter,通过哈希函数去做映射,当然这意味着你需要接受一定范围内的偏差

References

本文作者: 帅旋

本文链接: https://www.itzhai.com/columns/redis/bitmap-application.html

版权声明: 版权归作者所有,未经许可不得转载,侵权必究!联系作者请加公众号。

×
IT宅

关注公众号及时获取网站内容更新。