很多网站为了保持用户的活跃,都会搞签到活动,每日签到一次送金币啥的。
也许你会想到把签到状态放到一个HashMap中,标识用户已签到,但是随着用户数越来越多,我们就要寻找更加节省内存的存储结构了,这个时候,BitMap就派上用场了。
以下是记录某一天签到记录的例子:
1 | # 通过 sign:20210525 记录5月25日的签到的用户记录 |
以下是统计连续两天签到的用户记录数:
1 | 127.0.0.1:6379> SETBIT sign:20210526 10010 1 |
如果用户的标识比较复杂,不能直接作为BitMap的偏移量,或者用户标识已经超过了Redis的BitMap能够存储的范围,我们可以进一步使用BloomFilter,通过哈希函数去做映射,当然这意味着你需要接受一定范围内的偏差。