项目中我们通常要评估项目的使用人数,通常用PV(页面访问量) UV(用户访问量)来衡量,下面通过redis来实现该功能
1,统计项目PV
PV每次页面访问都应记录一次,这种情况比较简单,只需要维护一个计数器即可,每次访问调用一次Incr命令自增,下面主要说明统计uv的情况
2,统计项目的uv
uv每个用户一天内多次访问只记录一次,这里面存在一个去重的问题,如果用户量不大,每个用户一个key-value就行,即userid:1,然后统计多少个key即可.但是当用户量很大比如上百万,像腾讯日均uv可以达到上亿,每个用户一个key,对资源占用率太大。
仔细想一下就很容易明白,我们关注的只是用户量的累计值,并不关心是哪些用户,所以userid没必要去记录,但是如果不记录哪些用户登录过了,去重又是个问题,所以需要标记哪些用户已经存储过了。
2.1
采用bitmap结构记录哪些用户登录过了,bitmap其实就还是个字符串,只不过内容为二进制字符串,只有0和1,用户登录也是 ’登录‘ ‘未登录’ 两种状态,可以很好解决这个问题
统计1的个数即uv量
这种方式也有缺点,当记录一个很大id时,即使只有一个他也会开辟i个槽位,i-1个槽位前面全是0
2.2使用HyperLogLog结构存储(待续)