Redis统计用户访问量

本文探讨了三种使用Redis统计用户访问量的方法:1)使用Hash,简单易实现但内存占用大;2)利用Bitset,提高空间利用率,适用于大规模数据;3)应用概率算法如HyperLogLog,内存占用极小,适用于超大规模访问量,但精度有限。每种方法都有其适用场景和优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 使用Hash

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

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

当要访问一个网站某一天的访问量时,就可以直接使用HLEN来获取结果;
在这里插入图片描述

  • 优点: 简单,易实现.查询方便,并且数据精准性非常好.
  • 缺点: 内存占用过大.随着key的增多,性能会随之下降.无法支撑大规模的访问量.
2. 使用Bitset

对于个int型的数来说,若用来记录id,则只能记录一个,而若转换为二进制存储,则可以表示32个,空间的利用率提升了32倍.对于海量数据的处理,这样的存储方式会节省很多内存空间.对于未登陆的用户,可以使用Hash算法,把对应的用户标识哈希为一个数字id.对于一亿个数据来说,我们也只需要1000000000/8/1024/1024大约12M空间左右.

Redis已经为我们提供了SETBIT的方法,使用起来非常的方便,我们在item页面可以不停地使用SETBIT命令,设置用户已经访问了该页面,也可以使用GETBIT的方法查询某个用户是否访问。最后通过BITCOUNT统计该网页每天的访问数量。
在这里插入图片描述

  • 优点: 占用内存更小,查询方便,可以指定查询某个用户,对于非登陆的用户,可能不同的key映射到同一个id,否则需要维护一个非登陆用户的映射,有额外的开销。

  • 缺点: 如果用户过于稀疏,则占用的内存可能比第一个方法更大

3. 使用概率算法

对于一个网站页面若访问量非常大的话,如果要求的数量不是很高,可以考虑使用概率算法.在Redis中,已经对HyperLogLog算法做了封装,这是一种基数评估算法:不存储具体数值,只是存储用来计算概率的一些相关数据.
在这里插入图片描述
当用户访问网站的时候,可以使用PFADD命令,设置对应的命令,最后我们只要通过PFCOUNT顺利计算出最终的结果,因为这是一个概率算法,所以可能存在一定的误差。

  • 优点: 占用内存极小,对于一个key,只需要12kb。对于超大规模数据访问量的网站效率极高

  • 缺点: 查询指定用户的时候,可能会出错。在总数统计时也不一定十分精准.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一倾而尽

你的鼓励将是我最大的动力,谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值