ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

位图法统计活跃用户

2019-03-19 11:55:27  阅读:314  来源: 互联网

标签:127.0 0.1 图法 用户 活跃 6379 integer setbit 0redis


Setbit 的实际应用

场景: 1亿个用户, 每个用户 登陆/做任意操作 ,记为 今天活跃,否则记为不活跃

每周评出: 有奖活跃用户: 连续7天活动
每月评,等等...

思路:

Userid dt active
1 2013-07-27 1
1 2013-0726 1

如果是放在表中, 1:表急剧增大,2:要用group ,sum运算,计算较慢

用: 位图法 bit-map
Log0721: ‘011001...............0’

......
log0726 : ‘011001...............0’
Log0727 : ‘0110000.............1’

1: 记录用户登陆:
每天按日期生成一个位图, 用户登陆后,把user_id位上的bit值置为1

2: 把1周的位图 and 计算,
位上为1的,即是连续登陆的用户

redis 127.0.0.1:6379> setbit mon 100000000 0 (一亿用户星期一的初始状态,都是0)
(integer) 0
redis 127.0.0.1:6379> setbit mon 3 1 (3号用户周一登录一次,计为1)
(integer) 0
redis 127.0.0.1:6379> setbit mon 5 1(5号用户周一登录一次,计为1)
(integer) 0
redis 127.0.0.1:6379> setbit mon 7 1(7号用户周一登录一次,计为1)
(integer) 0
redis 127.0.0.1:6379> setbit thur 100000000 0
(integer) 0
redis 127.0.0.1:6379> setbit thur 3 1
(integer) 0
redis 127.0.0.1:6379> setbit thur 5 1
(integer) 0
redis 127.0.0.1:6379> setbit thur 8 1
(integer) 0
redis 127.0.0.1:6379> setbit wen 100000000 0
(integer) 0
redis 127.0.0.1:6379> setbit wen 3 1
(integer) 0
redis 127.0.0.1:6379> setbit wen 4 1
(integer) 0
redis 127.0.0.1:6379> setbit wen 6 1
(integer) 0
redis 127.0.0.1:6379> bitop and res mon feb wen
(integer) 12500001

位图法统计活跃用户

如上例,优点:
1: 节约空间, 1亿人每天的登陆情况,用1亿bit,约1200WByte,约10M 的字符就能表示
2: 计算方便

标签:127.0,0.1,图法,用户,活跃,6379,integer,setbit,0redis
来源: https://blog.51cto.com/5660061/2365188

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有