使用Redis bitmap统计活跃用户
2018-11-08 22:10:12
1263 次阅读
0 个评论
场景
用户登录后需要记录,以便以后进行登录统计
统计需求主要有:
(1)今天的登录用户数
(2)3天内都登录过的用户
(3)7天内登录过的用户
常规解决方案
如果不用redis,通常做法是在用户登录时记录日志,或者在数据库中添加一条登录记录
然后按照需求进行定时统计
redis解决方案
redis的 bit 操作非常适合处理这个场景
因为bit的值为 0或1,用户是否登录也可以用 0或1 来表示
我们把每天的用户登录信息记录到一个key中,值中的每个offset的值就是用户登录的标识
例如
用户登录后需要记录,以便以后进行登录统计
统计需求主要有:
(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 计算获取,命令与上一个类似
00
相关话题
- Redis BitMap 统计用户活跃指标
- redis使用setbit统计用户连续登录天数
- Redis 统计7天连续在线用户人数
- Redis统计今日签到用户数和用户是否签到
- Redis的bitMap命令
- redis连接方式推荐使用
- Elasticsearch Aggregation聚合统计
- spring集成Redis各种模式 单Redis,Sentinel 哨兵模式,Redis Cluster集群,Redis Sharding集群
- 解决root用户和普通用户的时区不一致的问题
- Redis 冒号分隔符
- Druid连接池实现用户密码加密
- 禁止用户打开浏览器控制台
- Nginx负载均衡时获取用户真实IP
- Redis实现分布式限流
- Redis实现分布式锁