使用Redis统计活跃用户

使用Redis统计活跃用户


统计活跃用户这个案例非常经典,也是我当时学习redis时,接触到的第一个让我眼睛一亮的使用方式

场景


用户登录后需要记录,以便以后进行登录统计

统计需求主要有:

(1)今天的登录用户数

(2)3天内都登录过的用户

(3)7天内登录过的用户

常规解决方案


如果不用redis,通常做法是在用户登录时记录日志,或者在数据库中添加一条登录记录

然后按照需求进行定时统计

redis解决方案


redis的 bit 操作非常适合处理这个场景

因为bit的值为 0或1,用户是否登录也可以用 0或1 来表示

我们把每天的用户登录信息记录到一个key中,值中的每个offset的值就是用户登录的标识

例如



bit 基本操作示例

(1)设置关键字的指定offset的值为 0 或 1

> setbit key 100 1

(2)bit运算

例如

key1 -> 0101
key2 -> 0011

and 运算

> bitop and ret key1 key2

就是对 key1 key2 各位进行 and 运算后赋值给 ret,结果为 0001

or 运算

> bitop or ret key1 key2

就是对 key1 key2 各位进行 or 运算后赋值给 ret,结果为 0111

(3)bit值为1的数量

> bitcount key


通过bit操作就可以实现用户统计的需求了

例如今天为 2016-01-18

key 定义为 userlogin:20160118

(1)用户登录

ID为 100 的用户登录了,执行

> setbit userlogin:20160118 100 1

(2)统计今天登录的用户数

> bitcount userlogin:20160118

(3)统计3天内都登录过的用户

“都登录过”是要取得bit值都为1的,通过 and 计算获取

> bitop or ret userlogin:20160116 userlogin:20160117 userlogin:20160118

(4)统计7天内登录过的用户

“登录过”表示bit值有一个为 1 即可,所以通过 or 计算获取

命令与上一个类似

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值