文章目录

  • 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统计用户访问量相关推荐

  1. redis统计用户日活量_使用redis统计用户日活、月活(实践版)

    常用方法三种 一.set集合(精准.耗费空间) 用户登录以后,把用户id添加到redis的set中,set会自动进行去重,类似于这样: 127.0.0.1:6379> sadd users_20 ...

  2. redis统计用户日活量_玩转Redis-HyperLogLog统计微博日活月活

    <玩转Redis>系列文章主要讲述Redis的基础及中高级应用.本文是<玩转Redis>系列第[9]篇,最新系列文章请前往公众号"zxiaofan"查看,或 ...

  3. redis统计用户日活量_Redis精确去重计数方法(咆哮位图)

    前言 如果要统计一篇文章的阅读量,可以直接使用 Redis 的 incr 指令来完成.如果要求阅读量必须按用户去重,那就可以使用 set 来记录阅读了这篇文章的所有用户 id,获取 set 集合的长度 ...

  4. 拼多多面试:如何用 Redis 统计独立用户访问量?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:沙茶敏碎碎念 来源:https://url.cn/5tQPE ...

  5. 拼多多面试|如何用 Redis 统计独立用户访问量?

    众所周至,拼多多的待遇也是高的可怕,在挖人方面也是不遗余力,对于一些工作3年的开发,稍微优秀一点的,都给到30K的Offer 当然,拼多多加班也是出名的,一周上6天班是常态,每天工作时间基本都是超过1 ...

  6. 拼多多面试真题:如何用 Redis 统计独立用户访问量!

    作者 | 沙茶敏碎碎念 来源 | http://toutiao.com/i6695734985246114312/ 众所周至,拼多多的待遇也是高的可怕,在挖人方面也是不遗余力,对于一些工作3年的开发, ...

  7. 拼多多的真实面试题:数亿的用户,如何用Redis统计独立用户访问量

    众所周至,拼多多的待遇也是高的可怕,在挖人方面也是不遗余力,对于一些工作3年的开发,稍微优秀一点的,都给到30K的Offer,当然,拼多多加班也是出名的,一周上6天班是常态,每天工作时间基本都是超过1 ...

  8. discuz设置用户每天回帖数_如何用Redis统计独立用户访问量,除了Hash跟Bitset,还有这个...

    众所周至,拼多多的待遇也是高的可怕,在挖人方面也是不遗余力,对于一些工作3年的开发,稍微优秀一点的,都给到30K的Offer,当然,拼多多加班也是出名的,一周上6天班是常态,每天工作时间基本都是超过1 ...

  9. 统计网站的用户访问量的实现

    1.项目需求:一个IP一天内访问算是一次访问,统计该网站的用户访问量. 2.实现思想:服务器启动的时候把数据库中的访问量进行缓存,用户访问的时候进行访问量的刷新,把访问信息存到集合中进行缓存,达到一定 ...

  10. redis实现用户签到,统计活跃用户,用户在线状态,用户留存率

    开发的过程中,可能会遇到用户签到.统计当天的活跃用户.以及每个用户的在线状态,用户留存率的开发需求,可能会用传统的方法,根据相应的需求设计数据库表等,但这样耗费的存储空间大,以及性能方面也不会太好,下 ...

最新文章

  1. Redis 的机制为什么不会产生 ABA 问题
  2. 3.8 matlab函数参数与变量的作用域
  3. ar路由器 pppoe下发ipv6 dns_移动宽带如何获取IPV6地址
  4. 硬件能力与智能AI-Zoomla!逐浪CMS2 x3.9.2正式发布
  5. steam一键授权工具_半个东的时间让你省了一个亿 Steam免费游戏一键领取
  6. php登入模块代码,thinkphp LoginAction.class.php 登录模块
  7. 常见电脑蓝屏代码以及解决办法
  8. matlab simulink 例子,simulink实例超实用
  9. 编译原理——证明文法具有二义性
  10. SpringBoot+Mybatis-plus+aop实现一个类似JPA的@Audited注解(字段审计)功能
  11. 信息学奥赛一本通1176题——谁考了第k名
  12. 160_zigbee协调器_一种判断数据包有没有拿对的方法【掐头去尾发,拿头指针、尾指针去判断】
  13. 如何关闭Mybatis的DEBUG log打印
  14. javascript高级一
  15. codeblocks使用教程(codeblocks使用教程调试)
  16. 如何搭建Filecoin测试网挖矿节点 | 开发者专区系列01
  17. 软件功能测试包含了哪些测试项目?功能测试报告收费标准
  18. 当年的你是如何走上编程之路的?
  19. element ui 下拉框搜索功能
  20. 免费制作云图的网站(可以从文章中提取关键字)

热门文章

  1. 计算机主板清理,电脑主板脏了如何清洗电脑主板才是正确
  2. 物联网蓝牙芯片的选型
  3. 2022-8-03 第七小组 黄均睿 学习日记 (day27)线程2
  4. slideDown和slideUp初始状态设置,使用animate替代
  5. rdt(可靠运输协议)理解
  6. 24点游戏开发实例(Qt含源码)
  7. 迅捷路由器设置找不到服务器,迅捷(fast)路由器怎么设置?
  8. 微信大数据:中国人怎么过国庆长假?
  9. 【kali】一款黑客们都在使用的操作系统
  10. 免费开源FTP工具:Cyberduck for Mac