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.虚拟机下面会…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
