前言
使用
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
如果觉得分享对您有一滴滴帮助的话,请伸出芊芊玉手点个赞和收藏吧~_