Redis_亿级访问量数据处理
11. 亿级访问量数据处理
11.1 场景表述
- 手机APP用户登录信息,一天用户登录ID或设备ID
- 电商或者美团平台,一个商品对应的评论
- 文章对应的评论
- APP上有打卡信息
- 网站上访问量统计
- 统计新增用户第二天还留存
- 商品评论的排序
- 月活统计
- 统计独立访客(Unique Vistitor UV)量
11.2 集合的统计模式
四种统计模式:聚合统计、排序统计、二值状态统计、基数统计
11.2.1 聚合统计
多个集合的交集、差集、并集
set集合,来存储所有登录系统的用户 user:id
set集合,来存储当日新增用户信息 user:id :20211222
假设系统是2021年12月22日上线,统计当天用户
sadd user:id :20211222 1001 1002 1003 1004 1005
统计总用户量
sunionstore user:id user:id user:id :20211222
第2天12月23日上线用户
sadd user:id :20211223 1001 1003 1006 1007
统计当日新增用户
sdiffstore user:new user:id :20211223 user:id
统计第一天登录,第二天还在的用户
sinterstore user:save user:id :20211222 user:id :20211223
统计第一天登录,第二天流失的用户
sdiffstore user:rem user:id : 20211222 user:id :20211223
11.2.2排序统计
List、Set 、Hash 、ZSet四种集合中,List和Zset是属于有序的集合
一种使用List,通过lpush加入
一种使用Zset,按分数权重处理
11.2.3 二值状态统计
统计疫苗接种人数(没有接种0 接种1)、打卡(没有打卡0 打卡1)、签到。
bit位 1byte=8bit
redis提供一种扩展数据类型 bitmap。
- 常用命令
- setbit
- getbit
- bitcount
统计一下,2023年1月前10天上班打卡情况 0为未打卡,1为打卡
setbit user:sign:202301 1
setbit user:sign:202301 1 0
setbit user:sign:202301 2 1
setbit user:sign:202301 3 0
...
setbit user:sign:202301 8 1
setbit user:sign:202301 9 0
getbit user:sign:202301 1 //0 获取第二天是否打卡
bitcount user:sign:202301 //5 获取打卡成功的天数
bitcount user:sign:202301 0 1 // 后面可以跟两个参数 统计从第0个字节开始,到第1个字节结束的数据 第二个数据为-1时表示统计所有数据
bitmap表示的是字节位置存储的对应的数据
其保存过程为:

使用它进行统计大数据时极度节省内存
- 存储1亿用户一天信息约使用12m的内存
- 但使用字符串保存时,1亿用户大概使用800M内存
假如有一个场景是需要3天当中都签到的用户,就是对bitmap进行与运算
bitop and signmap user:sign:1201 user:sign:1202 user:sign:1203
使用以上命令把三天同时登录的用户都存入到signmap数组当中

11.2.4 基数统计
统计一个集合中不重复的元素个数,例如统计网页的UV
- 第一种,使用set或者hash来完成统计
- sadd page1:uv u1001 u1002 u1003
- scard page1:uv
存在的问题:如果数据量非常大,且页面多,访问人数非常多,造成内存紧张
-
第二种,Redis提供了HyperLogLog(hll)
- HyperLogLog是用于统计基数的一种数据集合类型。优点在于当集合元素非常多,使用hll所需要的空间是固定且很小,使用12kb内存,可以存储2^64个元素的基数。缺点在于统计规则是基于概率完成的。会有0.81%左右的误差。如果统计1000万次,实际上可以是1100万 或900万人。
-
命令
pfadd page1:uv u1001 u1002 u1003添加数据pfcount page1:uv统计数据pfadd page2:uv u1001 u1004添加数据pfmerge page:uv page1:uv page2:uv合并数据pfcount page:uv统计数据
11.2.5小结
| 数据类型 | 聚合统计 | 排序统计 | 二值状态统计 | 基数统计 |
|---|---|---|---|---|
| set | 支持差集、交集、并集 | 不支持 | 不支持 | 支持精确统计,数据量大时占用内存较大 |
| zset | 支持差集、交集、并集 | 支持 | 不支持 | 支持精确统计,数据量大时占用内存较大 |
| hash | 不支持 | 不支持 | 不支持 | 支持精确统计,数据量大时占用内存较大 |
| list | 不支持 | 支持 | 不支持 | 不支持 |
| bitmap | 与、或、异或运算 | 不支持 | 支持 | 支持精确统计,数据量大时占用内存较大 |
| hyperloglog | 不支持 | 不支持 | 不支持 | 支持,采用概率算法,大数据量时,节省内存,但不精确 |
相关文章:
Redis_亿级访问量数据处理
11. 亿级访问量数据处理 11.1 场景表述 手机APP用户登录信息,一天用户登录ID或设备ID电商或者美团平台,一个商品对应的评论文章对应的评论APP上有打卡信息网站上访问量统计统计新增用户第二天还留存商品评论的排序月活统计统计独立访客(Unique Vistito…...
Java-类型和变量(基于C语言的补充)
一个简单的Java程序 args){ System.out.println("Hello,world"); } }通过上述代码,我们可以看到一个完整的Java程序的结构,Java程序的结构由如下三个部分组成: 1.源文件(扩展名为*.java):源文件带有类的定义…...
机器学习笔记:李宏毅diffusion model
1 概念原理 首先sample 一个都是噪声的vector然后经过denoise network 过滤一些杂质接着继续不断denoise,直到最后出来一张清晰图片 【类似于做雕塑,一开始只是一块石头(噪声很杂的雕塑),慢慢雕刻出想要的花纹】 同一个…...
STM32--TIM定时器(2)
文章目录 输出比较PWM输出比较通道参数计算舵机简介直流电机简介TB6612 PWM基本结构PWM驱动呼吸灯PWM驱动舵机PWM控制电机 输出比较 输出比较,简称OC(Output Compare)。 输出比较的原理是,当定时器计数值与比较值相等或者满足某种…...
git Authentication failed
情况是这样的,之前看代码只是clone了一份,但随着分支越来越多,有时候切换分支时必须先把修改的代码 stash 一下,觉得很麻烦,于是又clone了一份代码。然后pull代码是正常的,当push 代码的时候,去…...
【软考】2023系统架构设计师考试
目录 1 软考资格设置 2 考试报名 3 考试准备 4 参加考试 5 考试感受 6 其他 1 软考资格设置 2 考试报名 报名网址:https://www.ruankao.org.cn/ 3 考试准备 4 参加考试 2023年下半年系统架构设计师考试时间为11月4、5日。 5 考试感受 6 其他 最近好像有地区…...
opencv基础55-获取轮廓的特征值及示例
轮廓自身的一些属性特征及轮廓所包围对象的特征对于描述图像具有重要意义。本节介绍几个轮廓自身的属性特征及轮廓所包围对象的特征。 宽高比 可以使用宽高比(AspectRation)来描述轮廓,例如矩形轮廓的宽高比为: 宽高比 宽度&am…...
OpenCV图像处理——形态学操作
目录 连通性形态学操作腐蚀和膨胀开闭运算礼帽和黑帽 连通性 形态学操作 形态学转换是基于图像形状的一些简单操作。它通常在二进制图像上执行。腐蚀和膨胀时两个基本的形态学运算符。然后它的变体形式如开运算,闭运算,礼帽黑帽等 腐蚀和膨胀 cv.erode…...
修改VS Code终端的显示行数
文章目录 前言修改VS Code终端显示行数参考 前言 在我们使用VS Code运行代码的过程中,有时需要再终端中显示很多的运行过程信息或者结果。然而,VS Code的终端默认显示1000行的内容,随着显示内容的增多,之前的内容就丢失了。为了解…...
C++学习| MFC简单入门
前言:因为接手了CMFC的程序,所以需要对MFC编程方面有所了解。 C之MFC简单入门 MFC相关的概念MFCWIN32QT MFC项目基本操作MFC项目创建MFC项目文件解读界面和代码数据交互——加法器 MFC相关的概念 MFC MFC(Microsoft Foundation Classes微软…...
“一日之际在于晨”,欢迎莅临WAVE SUMMIT上午场:Arm 虚拟硬件早餐交流会
8月16日,盛夏的北京将迎来第九届WAVE SUMMIT深度学习开发者大会。在峰会主论坛正式开启前,让我们先用一份精美的元气早餐,和一场“Arm虚拟硬件交流会”,唤醒各位开发小伙伴的开发魂! 8月16日,WAVE SUMMIT大…...
leetcode454. 四数相加 II
题目:leetcode454. 四数相加 II 描述: 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 < i, j, k, l < n nums1[i] nums2[j] nums3[k] num…...
PHP证券交易员学习网站mysql数据库web结构apache计算机软件工程网页wamp
一、源码特点 PHP证券交易员学习网站 是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 下载地址https://download.csdn.net/download/qq_41221322/88205549 PHP证券交易员…...
对p-n结/AlGaN/GaN HEMTs中n-GaN掺杂浓度对栅极可靠性的影响
目录 第35届功率半导体器件与集成电路国际研讨会论文集2023年5月28日至6月1日,中国香港南方科技大学电气电子工程系,深圳标题:Impacts of n-GaN Doping Concentration on Gate Reliability of p-n Junction/AlGaN/GaN HEMTs摘要信息解释研究了…...
Mac M2 Pro安装使用Cocoapods
Mac Pro M2安装使用Cocoapods 在新公司要做iOS开发,所以在新电脑上安装Cocoapods 在升级gem,sudo gem update --system,和安装cocoapods时都遇到如下的提示: ERROR: While executing gem ... (Errno::EPERM)Operation not per…...
枚举缓存工具
此文章为笔记,为阅读其他文章的感受、补充、记录、练习、汇总,非原创,感谢每个知识分享者。 文章目录 1. 背景2. 枚举缓存3. 样例展示4. 性能对比5. 总结 本文通过几种样例展示如何高效优雅的使用java枚举消除冗余代码。 1. 背景 枚举在系统…...
【BASH】回顾与知识点梳理(二十五)
【BASH】回顾与知识点梳理 二十五 二十五. 特殊shell、PAM 模块、讯息传递和大量建置账号25.1 特殊shell特殊的 shell, /sbin/nologin 25.2 PAM模块25.3 Linux 主机上的用户讯息传递查询使用者: w, who, last, lastlog使用者对谈: write, mesg, wall使用…...
什么是Node js?什么是React?有什么区别
JavaScript是当今最流行的编程语言之一,它用于开发多种技术,两种这样的技术是Node.js和React。许多学生很难理解Nodejs和React之间的区别。 React和Nodejs之间的主要区别在于它们的使用位置。Nodejs 用于开发应用程序的服务器端,而Reactjs用于…...
使用postman做接口测试
1.接口测试:针对软件对外提供服务的接口的输入输出进行测试,以及接口间相互逻辑的测试,验证接口功能与接口描述文档的一致性 2.接口测试流程: 1)获取接口信息:通过接口文档或抓包来获取接口的基本调用方式和…...
VMware Workstation 如何启用复制粘贴
产品:VMware Workstation 16 Pro 版本:16.1.1 build-17801498 我们刚安装好的 VMware Workstation 会发现无法复制粘贴文件到虚拟机中,如下为解决方案: 1.点击 虚拟机,点击 安装 VMware Tools(T)...。 2.虚拟机下面会…...
Sentinel-3B OLCI 3 级全球分箱地球观测降分辨率(ERR)叶绿素(CHL)数据,版本 2022.0
Sentinel-3B OLCI Level-3 Global Binned Earth-observation Reduced Resolution (ERR) Chlorophyll (CHL) Data, version 2022.0 简介 叶绿素 a 数据集提供全球网格化的表层叶绿素 a 浓度(浮游植物生物量的替代指标)合成数据。CHL 支持时间序列和气候…...
亚马逊卖家公开信息数据提取:反爬攻防战与 Python 批量采集实战
摘要: 批量获取亚马逊(Amazon)第三方卖家的商业名称、信用代码和注册地址等信息,对于跨境 B2B 拓客和供应链分析具有重要意义。然而,亚马逊的 Cloudflare 盾和 Robot 验证码构成了极高的反爬门槛。本文将深度解析亚马逊…...
Onekey终极指南:如何5分钟快速获取Steam游戏清单的免费神器
Onekey终极指南:如何5分钟快速获取Steam游戏清单的免费神器 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 还在为复杂的Steam游戏清单下载而头疼吗?想要备份游戏资源却不…...
全链路压测实战:双十一级别的流量,我是这样扛住的
作为一名在质量保障领域摸爬滚打多年的测试工程师,我深知传统的单接口压测在如今分布式架构下的无力感。当业务流量达到双十一这种脉冲式、高并发的级别时,任何一个非核心链路上的“短板”都可能引发系统性的雪崩。全链路压测不再是选择题,而…...
搞定这 5 个全栈电商项目,面试别再用 Todo-List 凑数了
找独立开发练手项目或者写简历项目时,最忌讳两件事:一是太简单(纯前端 Mock 数据,点两下就没了),二是太假(一上来就硬套微服务、消息队列、高并发,结果自己根本Hold不住)…...
中兴光猫终极管理指南:解锁工厂模式与Telnet权限的实战教程
中兴光猫终极管理指南:解锁工厂模式与Telnet权限的实战教程 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 掌握中兴光猫的设备管理和权限获取能力是网络管理员和技术爱好者…...
网络配置工具类详解
CNet 网络配置工具类详解平台:仅支持 Linux,大量使用 ioctl 系统调用一、概述 CNet 是一个 纯静态方法的网络配置工具类,封装了 Linux 下常用的网络操作:功能类别涵盖内容IP 地址读取/设置本机 IP、子网掩码网关读取/添加/删除/设…...
Spring Security OAuth2 /oauth/token 401原因与Content-Type规范
1. 问题现场还原:一个看似简单却让开发停摆两小时的/oauth/token请求刚接手一个老项目做安全加固,第一件事就是验证OAuth2密码模式的token获取流程。我照着文档写了一条curl命令:curl -X POST http://localhost:8080/oauth/token回车执行&…...
终极键盘重映射解决方案:3分钟实现职业级游戏操作精度
终极键盘重映射解决方案:3分钟实现职业级游戏操作精度 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 在激烈的游戏对抗中,你是否曾因键盘按键冲突而错失关键操作?当同时按下…...
Claude SWOT分析(内部风控文档流出版):3类高危使用场景+2个监管红线预警
更多请点击: https://intelliparadigm.com 第一章:Claude SWOT分析(内部风控文档流出版):3类高危使用场景2个监管红线预警 高危使用场景识别 在企业级AI应用中,Claude模型若未经严格风控适配,…...
