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不支持不支持不支持支持,采用概率算法,大数据量时,节省内存,但不精确

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/38270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【BEV】3D视觉 PRELIMINARY

这里的知识来自于论文 Delving into the Devils of Bird’s-eye-view Perception: A Review, Evaluation and Recipe 的 Appendix B.1 部分来自 这篇文章 从透视图转向鸟瞰图。(Xw、Yw、Zw)、(Xc、Yc、Zc)表示世界World坐标和相…

Android学习之路(4) UI控件之Button (按钮)与 ImageButton (图像按钮)

本节引言: 今天给大家介绍的Android基本控件中的两个按钮控件,Button普通按钮和ImageButton图像按钮; 其实ImageButton和Button的用法基本类似,至于与图片相关的则和后面ImageView相同,所以本节 只对Button进行讲解&am…

vue自定义穿梭框支持远程滚动加载

分享-2023年资深前端进阶:前端登顶之巅-最全面的前端知识点梳理总结,前端之巅 *分享一个使用比较久的🪜 技术框架公司的选型(老项目):vue2 iview-ui 方案的实现思路是共性的,展现UI样式需要你们自定义进行更改&#…

【注解使用】使用@Autowired后提示:Field injection is not recommended(Spring团队不推荐使用Field注入)

问题发生场景: 在使用 IDEA 开发 SpringBoot 项目时,在 Controller 类中使用注解 Autowired 注入一个依赖出现了警告提示,查看其他使用该注解的地方同样出现了警告提示。这是怎么回事?由于先去使用了SpringBoot并没有对Spring进行…

分布式 - 消息队列Kafka:Kafka消费者和消费者组

文章目录 1. Kafka 消费者是什么?2. Kafka 消费者组的概念?3. Kafka 消费者和消费者组有什么关系?4. Kafka 多个消费者如何同时消费一个分区? 1. Kafka 消费者是什么? 消费者负责订阅Kafka中的主题,并且从…

【数据结构OJ题】反转链表

原题链接:https://leetcode.cn/problems/reverse-linked-list/description/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 方法一:三指针翻转法 使用三个结构体指针n1,n2,n3,原地修改结点…

VSCode如何设置高亮

一、概述 本文主要介绍在 VSCode 看代码时,怎样使某个单词高亮显示,主要通过以下三步实现: 安装 highlight-words 插件 配置 highlight-words 插件 设置高亮快捷键F8 工作是嵌入式开发的,代码主要是C/C的,之前一直用…

【Linux】高级IO

目录 IO的基本概念 钓鱼五人组 五种IO模型 高级IO重要概念 同步通信 VS 异步通信 阻塞 VS 非阻塞 其他高级IO 阻塞IO 非阻塞IO IO的基本概念 什么是IO? I/O(input/output)也就是输入和输出,在著名的冯诺依曼体系结构当中…

ROS学习笔记(三)---好用的终端Terminator

ROS学习笔记文章目录 01. ROS学习笔记(一)—Linux安装VScode 02. ROS学习笔记(二)—使用 VScode 开发 ROS 的Python程序(简例) 一、Terminator是什么? 在前面的学习中,为了运行hello.py我是在vscode频繁的点击运行窗口的“”号…

智谷星图赵俊:让人才和区块链产业“双向奔赴”丨对话MVP

区块链产业需要什么样的人才?赵俊很有发言权。 赵俊是北京智谷星图科技有限公司的技术总监,也是FISCO BCOS官方认证讲师。他2017年接触区块链,随后选择人才培育领域深耕。“为区块链行业引进更多人才这件事很有价值,跟我的职业理…

菜单和内容滚动的联动原理及代码

之前写代码有个需求:左侧是一个菜单,右边是内容,点击左侧菜单右边内容滚动到对应位置,右边内容滚动到某位置时,左侧菜单也会选中对应的菜单项。UI如下:这是大多网站的移动端都会有的需求。 解决方案一&…

高忆管理:什么是一码通?有什么好处?

在经过券商开户后,除了其间的财物账户、沪深股账户外,还有一个一码通账户,什么是一码通?它有什么好处?关于这些,高忆管理为大家预备了以下参阅内容。 什么是一码通? 一码通账户,一般…

【C语言】小游戏-扫雷(清屏+递归展开+标记)

大家好&#xff0c;我是深鱼~ 目录 一、游戏介绍 二、文件分装 三、代码实现步骤 1.制作简易游戏菜单 2. 初始化棋盘(11*11) 3.打印棋盘(9*9) 4.布置雷 5.计算(x,y)周围8个坐标的和 6.排查雷 <1>清屏后打印棋盘 <2>递归展开 <3>标记雷 四、完整代…

视频监控有哪些存储方式?安防监控应该如何选择存储模式?

视频监控系统涉及到大量的视频数据&#xff0c;需要对这些数据进行存储&#xff0c;以备日后查看或备份。视频监控的存储需求需要根据场所的实际情况进行选择&#xff0c;以保证监控数据的有效存储和日后的调阅、回溯。 当前视频监控的存储方式&#xff0c;通常有以下几种&…

Golang协程,通道详解

进程、线程以及并行、并发 关于进程和线程 进程&#xff08;Process&#xff09;就是程序在操作系统中的一次执行过程&#xff0c;是系统进行资源分配和调度的基 本单位&#xff0c;进程是一个动态概念&#xff0c;是程序在执行过程中分配和管理资源的基本单位&#xff0c;每…

【BASH】回顾与知识点梳理(二十三)

【BASH】回顾与知识点梳理 二十三 二十三. Linux 账号管理&#xff08;二&#xff09;23.1 账号管理新增与移除使用者&#xff1a; useradd, 相关配置文件, passwd, usermod, userdelusermoduserdel 23.2 用户功能&#xff08;普通用户可使用&#xff09;idfingerchfnchsh 23.3…

【数据库系统】--【2】DBMS架构

DBMS架构 01DBMS架构概述02 DBMS的物理架构03 DBMS的运行和数据架构DBMS的运行架构DBMS的数据架构PostgreSQL的体系结构RMDB的运行架构 04DBMS的逻辑和开发架构DBMS的层次结构DBMS的开发架构DBMS的代码架构 05小结 01DBMS架构概述 02 DBMS的物理架构 数据库系统的体系结构 数据…

腾讯Perfdog支持Windows PC端体验性能测试

一、背景 最近在做抖音的小玩法&#xff0c;其基于unity引擎&#xff0c;然后挂载到直播伴侣。以及Perfdog近期也支持了Windows的测试&#xff0c;所以做一个体验测试。 二、如何做 查看PC端的支持&#xff0c;目前是beat版本 选择或搜索自己需要的对应的程序&#xff0c;如…

大数据Flink(五十九):Flink on Yarn的三种部署方式介绍以及注意

文章目录 Flink on Yarn的三种部署方式介绍以及注意 一、Pre-Job 模式部署作业

对任意类型数都可以排序的函数:qsort函数

之前我们学习过冒泡排序&#xff1a; int main() {int arr[] { 9,7,8,6,5,4,3,2,1,0 };int sz sizeof(arr)/sizeof(arr[0]);int i 0;for (i 0; i < sz-1; i) {int j 0;for (j 0; j < sz-1-i; j) {if (arr[j] > arr[j 1]){int temp 0;temp arr[j];arr[j] ar…