0
点赞
收藏
分享

微信扫一扫

Redis做活跃用户统计利器之HyperLoglog

云竹文斋 2022-02-14 阅读 56

前言


使用

1、用redis的set集合。

用户登录以后,把用户id添加到redis的set中,set会自动进行去重,类似于这样:

127.0.0.1:6379> sadd users_2019_06_17 user1
(integer) 1
127.0.0.1:6379> sadd users_2019_06_17 user2
(integer) 1
127.0.0.1:6379> sadd users_2019_06_17 user3
(integer) 1

很显然,只需要一条scard命令:

127.0.0.1:6379> scard users_2019_06_17
(integer) 3

可以看出来,2019年6月17号的用户数是3个。


2、用Bitmap。

我们存放100万个id号需要100万个bit位,也就是100万/8 = 125K字节,直接用以id号和100万取余,余数作为bit的索引:

127.0.0.1:6379> setbit login_2019_06_17  10000 1
(integer) 0
127.0.0.1:6379> setbit login_2019_06_17  1024 1
(integer) 0
127.0.0.1:6379> setbit login_2019_06_17  238 1
(integer) 0
127.0.0.1:6379> setbit login_2019_06_17  3434 1
(integer) 0

这时候同样,只要一条bitcount就能查出来用户数:

127.0.0.1:6379> bitcount login_2019_06_17
(integer) 4

此时存储100万个用户,只需要125K个字节,一个月才4M。


3、用redis的HyperLogLog

原理很复杂就不说了,只说下用法:

127.0.0.1:6379> pfadd login.2019_06_17 user1
(integer) 1
127.0.0.1:6379>  pfadd login.2019_06_17 user2
(integer) 1
127.0.0.1:6379>  pfadd login.2019_06_17 user3
(integer) 1
127.0.0.1:6379>  pfadd login.2019_06_17 user4
(integer) 1
127.0.0.1:6379> pfcount login.2019_06_17
(integer) 4

此时存储100万个独立用户只需要15K左右,一个月才480K左右!


总结



原文: https://mp.weixin.qq.com/s/t0g54IqFBx3Zoxq2z37s8A
作者: 若鱼1919


如果觉得分享对您有一滴滴帮助的话,请伸出芊芊玉手点个赞和收藏吧~_


举报

相关推荐

0 条评论