Redis统计用户访问量
文章目录
- 1. 使用Hash
- 2. 使用Bitset
- 3. 使用概率算法
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。对于超大规模数据访问量的网站效率极高
缺点: 查询指定用户的时候,可能会出错。在总数统计时也不一定十分精准.
Redis统计用户访问量相关推荐
- redis统计用户日活量_使用redis统计用户日活、月活(实践版)
常用方法三种 一.set集合(精准.耗费空间) 用户登录以后,把用户id添加到redis的set中,set会自动进行去重,类似于这样: 127.0.0.1:6379> sadd users_20 ...
- redis统计用户日活量_玩转Redis-HyperLogLog统计微博日活月活
<玩转Redis>系列文章主要讲述Redis的基础及中高级应用.本文是<玩转Redis>系列第[9]篇,最新系列文章请前往公众号"zxiaofan"查看,或 ...
- redis统计用户日活量_Redis精确去重计数方法(咆哮位图)
前言 如果要统计一篇文章的阅读量,可以直接使用 Redis 的 incr 指令来完成.如果要求阅读量必须按用户去重,那就可以使用 set 来记录阅读了这篇文章的所有用户 id,获取 set 集合的长度 ...
- 拼多多面试:如何用 Redis 统计独立用户访问量?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:沙茶敏碎碎念 来源:https://url.cn/5tQPE ...
- 拼多多面试|如何用 Redis 统计独立用户访问量?
众所周至,拼多多的待遇也是高的可怕,在挖人方面也是不遗余力,对于一些工作3年的开发,稍微优秀一点的,都给到30K的Offer 当然,拼多多加班也是出名的,一周上6天班是常态,每天工作时间基本都是超过1 ...
- 拼多多面试真题:如何用 Redis 统计独立用户访问量!
作者 | 沙茶敏碎碎念 来源 | http://toutiao.com/i6695734985246114312/ 众所周至,拼多多的待遇也是高的可怕,在挖人方面也是不遗余力,对于一些工作3年的开发, ...
- 拼多多的真实面试题:数亿的用户,如何用Redis统计独立用户访问量
众所周至,拼多多的待遇也是高的可怕,在挖人方面也是不遗余力,对于一些工作3年的开发,稍微优秀一点的,都给到30K的Offer,当然,拼多多加班也是出名的,一周上6天班是常态,每天工作时间基本都是超过1 ...
- discuz设置用户每天回帖数_如何用Redis统计独立用户访问量,除了Hash跟Bitset,还有这个...
众所周至,拼多多的待遇也是高的可怕,在挖人方面也是不遗余力,对于一些工作3年的开发,稍微优秀一点的,都给到30K的Offer,当然,拼多多加班也是出名的,一周上6天班是常态,每天工作时间基本都是超过1 ...
- 统计网站的用户访问量的实现
1.项目需求:一个IP一天内访问算是一次访问,统计该网站的用户访问量. 2.实现思想:服务器启动的时候把数据库中的访问量进行缓存,用户访问的时候进行访问量的刷新,把访问信息存到集合中进行缓存,达到一定 ...
- redis实现用户签到,统计活跃用户,用户在线状态,用户留存率
开发的过程中,可能会遇到用户签到.统计当天的活跃用户.以及每个用户的在线状态,用户留存率的开发需求,可能会用传统的方法,根据相应的需求设计数据库表等,但这样耗费的存储空间大,以及性能方面也不会太好,下 ...
最新文章
- Redis 的机制为什么不会产生 ABA 问题
- 3.8 matlab函数参数与变量的作用域
- ar路由器 pppoe下发ipv6 dns_移动宽带如何获取IPV6地址
- 硬件能力与智能AI-Zoomla!逐浪CMS2 x3.9.2正式发布
- steam一键授权工具_半个东的时间让你省了一个亿 Steam免费游戏一键领取
- php登入模块代码,thinkphp LoginAction.class.php 登录模块
- 常见电脑蓝屏代码以及解决办法
- matlab simulink 例子,simulink实例超实用
- 编译原理——证明文法具有二义性
- SpringBoot+Mybatis-plus+aop实现一个类似JPA的@Audited注解(字段审计)功能
- 信息学奥赛一本通1176题——谁考了第k名
- 160_zigbee协调器_一种判断数据包有没有拿对的方法【掐头去尾发,拿头指针、尾指针去判断】
- 如何关闭Mybatis的DEBUG log打印
- javascript高级一
- codeblocks使用教程(codeblocks使用教程调试)
- 如何搭建Filecoin测试网挖矿节点 | 开发者专区系列01
- 软件功能测试包含了哪些测试项目?功能测试报告收费标准
- 当年的你是如何走上编程之路的?
- element ui 下拉框搜索功能
- 免费制作云图的网站(可以从文章中提取关键字)