10万用户一年365天的登录情况如何用redis存储,并快速检索任意时间窗内的活跃用户
1、redsi的bitmap数据结构介绍
bitmap本质上是一个string类型,只是他操作的是string的某个位是0还是1。
setbit和getbit 两条命令是对字符串的位操作。每个位只能是0/1,然后用Bitcount命令计算这个key有多少个1。
例如执行 setbit 'a' 10 1
命令
redis会存以下数据
Bit运算,BITOP 支持四种表达式运算: AND(交集), OR(并集), XOR(异或) 和NOT(取非), 用法如下:
BITOP AND result srckey1 srckey2 srckey3 ... srckeyN
BITOP OR result srckey1 srckey2 srckey3 ... srckeyN
BITOP XOR result srckey1 srckey2 srckey3 ... srckeyN
BITOP NOT result srckey
2、记录用户每天的登录情况
以日期为key,userId为偏移量,执行命令setbit day useId 1
例如:小梅(userId= 1992)和小明(userId=9877)在 2020-10-01日登录;
setbit '2020-10-01' 1992 1
setbit '2020-10-01' 9877 1
小梅(userId= 1992)和小达(userId=10000)在 2020-10-02日登录;
setbit '2020-10-02' 1992 1
setbit '2020-10-02' 10000 1
3、统计2020-10-01和2020-10-02活跃的用户数量只需要执行命令
bitcount '2020-10-01'
bitcount '2020-10-02'
4、统计2020-10-01到2020-10-02这个时间端活跃的用户数量只需要执行命令
bitop or 'result' '2020-10-01' '2020-10-02'
bitcount 'result'
5、查询小梅在2020-10-01日有没有登录只需执行命令
getbit '2020-10-01' 1992
欢迎关注我的公众号:“从零开始的it转行生”