redis实现用户访问量

redis实现用户访问量

五种基本数据类型

  1. String(使用场景:访问量统计,秒杀商品数量,最大512M)
  2. List(使用场景:队列,栈)
  3. Set(使用场景:共同含义,统计网站ip访问量)
  4. Zset(使用场景:排行榜,带权重的队列)
  5. Hash(使用场景:对象,比如用户信息)

三种基本特殊类型

  1. geospatial(使用场景:附近的人)
  2. HyperLogLog(使用场景:网站流量访问)
  3. Bitmap (使用场景:用户登录状态,用户周活跃)

1.使用Hash

哈希是Redis的一种基础数据结构,Redis底层维护的是一个开散列,会把不同的key映射到哈希表上,如果是遇到关键字冲突,那么就会拉出一个链表出来。

当一个用户访问的时候,如果用户登陆过,那么我们就使用用户的id,如果用户没有登陆过,那么我们也能够前端页面随机生成一个key用来标识用户,当用户访问的时候,我们可以使用HSET命令,key可以选择URI与对应的日期进行拼凑,field可以使用用户的id或者随机标识,value可以简单设置为1。

当我们要统计某一个网站某一天的访问量的时候,就可以直接使用HLEN来得到最终的结果了。

127.0.0.1:6379> hset index.html userid01 1
(integer) 1
127.0.0.1:6379> hset index.html userid02 1
(integer) 1
127.0.0.1:6379> hset index.html userid03 1
(integer) 1
127.0.0.1:6379> hlen index.html
(integer) 3

优点:简单,容易实现,查询也是非常方便,数据准确性非常高。

缺点:占用内存过大,。随着key的增多,性能也会下降。小网站还行,数亿PV的网站肯定受不了

2.使用概率算法HyperLogLog

对于多个页面都可能非常多访问量的网站,如果所需要的数量不用那么准确,可以使用概率算法,事实上,我们对一个网站的UV的统计,1亿跟1亿零30万其实是差不多的。在Redis中,已经封装了HyperLogLog算法,他是一种基数评估算法。这种算法的特征,一般都是数据不存具体的值,而是存用来计算概率的一些相关数据。

127.0.0.1:6379> pfadd index2.html userid01 userid02 userid03
(integer) 1
127.0.0.1:6379> pfcount index2.html
(integer) 3

当用户访问网站的时候,我们可以使用PFADD命令,设置对应的命令,最后我们只要通过PFCOUNT就能顺利计算出最终的结果,因为这个只是一个概率算法,所以可能存在0.81%的误差。

优点:占用内存极小,对于一个key,只需要12kb。对于超多用户的特别适用。

缺点:查询指定用户的时候,可能会出错,毕竟存的不是具体的数据。总数也存在一定的误差。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容