Redis统计大法:挖掘数据的四重宝藏【redis第五部分】

news2025/4/17 23:00:31

Redis统计大法:挖掘数据的四重宝藏

  • 前言
  • 第一:redis集合统计简介
  • 第二:聚合统计->数据的综合分析
    • 总和(Sum):
    • 平均值(Average)
    • 中位数(Median)
  • 第三:排序统计->数据排名的魔法
  • 第四:二值状态统计->设备状态的掌控
    • 1. 位图(Bitmaps)的基本概念
    • 2. 位操作的用途
    • 3. 实时设备状态跟踪
    • 4. 设备状态统计
    • 5. 历史状态记录
    • 6. 清除旧状态
    • 7. 应用场景
  • 第五:基数统计->唯一计数的奥秘
    • 1. HyperLogLog基本原理
    • 2. 估算唯一元素数量
    • 3. 结合多个HLL
    • 4. 适用场景
    • 5. 准确性和内存消耗的权衡
  • 第六:应用建议

前言

数据是新时代的燃料,而Redis是解锁数据宝藏的奇妙工具。在这篇博客中,我们将揭示Redis的统计神器,包括聚合统计、排序统计、二值状态统计和基数统计,助你挖掘数据的四重宝藏。

第一:redis集合统计简介

Redis集合统计是一种在Redis中使用集合数据类型进行统计和分析的方法。这可以涵盖各种应用场景,例如计数、去重、查找共同元素等。以下是关于Redis集合统计的基本概念和用途:

1. 计数: Redis集合允许您存储不重复的元素,因此您可以使用集合来进行计数操作。每当您将一个元素添加到集合时,Redis会确保它不存在于集合中,从而实现了元素的去重。通过检查集合的大小,您可以轻松获取元素的数量,从而进行计数。

2. 去重: 如果您需要从一组数据中去除重复的元素,Redis集合是一个有效的工具。您只需将数据中的元素一个一个地添加到集合中,最后集合中将只包含不重复的元素。

3. 查找共同元素: 您可以使用Redis的集合操作来查找多个集合之间的共同元素。例如,使用交集操作可以找到多个集合之间的重叠元素,这对于查找共同兴趣、共同关注者等情况非常有用。

4. 过滤数据: 使用Redis集合可以帮助您过滤数据。您可以将需要过滤的数据存储在一个集合中,然后逐个检查其他数据是否在该集合中。这对于处理大量数据并提取特定子集的情况非常有用。

5. 统计数据: Redis集合允许您轻松进行元素统计。您可以统计集合的大小,了解集合中元素的数量。这在多种应用中都有用,例如统计用户的点赞、收藏、关注等操作。

6. 快速查找: Redis集合具有快速的查找性能。由于集合中的元素是唯一的,Redis可以在O(1)时间内检查一个元素是否存在于集合中。

image-20220712201528009

Redis集合统计是一个强大的工具,可以在不同应用中用于数据分析、计数和去重等操作。通过合理使用Redis集合,您可以更有效地处理数据并从中获取有用的信息。

第二:聚合统计->数据的综合分析

聚合统计是一种数据分析方法,旨在汇总和综合数据,以提供有关数据集的重要信息。在Redis中,您可以使用集合来执行各种统计任务,包括总和、平均值、中位数等。以下是解释聚合统计原理以及如何使用Redis集合执行这些统计任务的详细信息:

总和(Sum):

  • 原理: 要计算一组数字的总和,您可以将这些数字存储在Redis集合中。每个数字表示一个成员,集合中的成员是唯一的,确保不会有重复的元素。然后,通过遍历集合并将每个成员的值相加,您可以计算出总和。

  • 示例:

    SADD numbers 5 10 15 20
    SRANDMEMBER numbers 4
    # 结果可能是 [15, 5, 20, 10]
    
  • 计算总和:

    SCARD numbers  # 获取集合中的元素数量
    4
    
    SRANDMEMBER numbers 4
    # 结果可能是 [15, 5, 20, 10]
    
    SMEMBERS numbers
    # 获取集合中的所有成员 [5, 10, 15, 20]
    
    SSCAN numbers 0 MATCH * COUNT 1000
    # 使用SCAN命令遍历集合中的所有成员
    
  • 计算总和:

    SRANDMEMBER numbers 4
    # 结果可能是 [15, 5, 20, 10]
    
    SRANDMEMBER numbers 4
    # 随机获取4个集合成员
    
    SMEMBERS numbers
    # 获取集合中的所有成员 [5, 10, 15, 20]
    

平均值(Average)

  • 原理: 要计算一组数字的平均值,首先计算它们的总和,然后将总和除以元素的数量。Redis的集合操作可用于获取集合中元素的数量。

  • 示例:

    SADD numbers 5 10 15 20
    
  • 计算平均值:

    SCARD numbers  # 获取集合中的元素数量
    4
    
    SRANDMEMBER numbers 4
    # 结果可能是 [15, 5, 20, 10]
    
    SMEMBERS numbers
    # 获取集合中的所有成员 [5, 10, 15, 20]
    

中位数(Median)

  • 原理: 要计算一组数字的中位数,首先对这些数字进行排序,然后找到中间的数字。如果元素数量是奇数,中位数就是中间的元素;如果元素数量是偶数,中位数是中间两个元素的平均值。Redis的集合操作可用于对集合中的元素进行排序。

  • 示例:

    SADD numbers 5 10 15 20
    
  • 计算中位数:

    SORT numbers LIMIT 1 1
    # 对集合中的元素进行升序排序并获取中位数
    
    SORT numbers LIMIT 2 1
    # 对集合中的元素进行升序排序并获取中位数
    
    SORT numbers LIMIT 1 1 DESC
    # 对集合中的元素进行降序排序并获取中位数
    
    SORT numbers LIMIT 2 1 DESC
    # 对集合中的元素进行降序排序并获取中位数
    

通过这些原理和Redis集合操作,您可以执行各种聚合统计任务,包括总和、平均值和中位数。这对于分析和处理数据非常有用,特别是在需要实时数据计算的应用中。

第三:排序统计->数据排名的魔法

Redis中的排序集合(Sorted Set),也被称为有序集合,是一种数据结构,它允许您存储一组唯一的成员,并为每个成员分配一个分数(score)。有序集合的成员是唯一的,但分数可以重复。

以下是有关Redis排序集合的深入研究,包括如何在数据集中进行排名、范围查询和排名统计的详细信息:

1. 添加成员到排序集合:

您可以使用ZADD命令将成员添加到排序集合中,并分配一个分数。分数可以是整数或浮点数。成员会根据其分数在集合中排序。

ZADD myset 90 "Alice"
ZADD myset 85 "Bob"
ZADD myset 95 "Charlie"

2. 获取成员的排名:

您可以使用ZRANK命令来获取排序集合中特定成员的排名。排名是从0开始的,表示成员在排序集合中的位置。

ZRANK myset "Alice"  # 返回0,因为Alice在排序集合中的排名是第一位
ZRANK myset "Bob"    # 返回1
ZRANK myset "Charlie" # 返回2

3. 获取成员的分数:

使用ZSCORE命令,您可以获取排序集合中特定成员的分数。

ZSCORE myset "Alice"  # 返回90
ZSCORE myset "Bob"    # 返回85
ZSCORE myset "Charlie" # 返回95

4. 获取指定排名范围的成员:

使用ZRANGE命令,您可以按排名范围获取排序集合中的成员。这对于获取排名最高的前N个成员非常有用。

ZRANGE myset 0 1  # 获取排名前两位的成员,返回["Alice", "Bob"]

5. 获取指定分数范围的成员:

使用ZRANGEBYSCORE命令,您可以按分数范围获取排序集合中的成员。这对于获取分数在特定范围的成员非常有用。

ZRANGEBYSCORE myset 85 90  # 获取分数在85到90之间的成员,返回["Bob", "Alice"]

6. 获取成员的排名和分数:

使用ZRANGE命令的WITHSCORES选项,您可以同时获取成员的排名和分数。

ZRANGE myset 0 1 WITHSCORES  # 获取排名前两位的成员及其分数,返回["Bob", "85", "Alice", "90"]

7. 删除成员:

使用ZREM命令,您可以从排序集合中删除指定的成员。

ZREM myset "Bob"  # 从排序集合中删除Bob

8. 计算成员的排名:

使用ZINCRBY命令,您可以增加或减少成员的分数,并返回新的分数。这可用于更新成员的排名。

ZINCRBY myset 5 "Alice"  # 将Alice的分数增加5

Redis排序集合非常适用于需要对数据进行排名和排序的应用。它可以用于领先的排行榜、时间序列数据、范围查询等情况,提供了高效的数据操作和统计能力。

第四:二值状态统计->设备状态的掌控

Redis的位图(Bitmaps)和位操作是强大的工具,可用于实时设备状态跟踪和统计。它们可以有效地处理设备状态的二进制信息,使您能够迅速了解设备的状态、历史和趋势。以下是有关如何使用Redis位图和位操作进行设备状态掌控的探讨:

1. 位图(Bitmaps)的基本概念

  • 位图是Redis中的二进制数据结构,可以用来表示一组二进制位,每个位表示某个设备的状态。位图可以存储大量设备的状态信息,非常紧凑且高效。

  • 每个位代表一个设备的状态,通常0表示关闭或无事件,1表示开启或有事件。这使得位图非常适合表示开关状态、在线/离线状态、事件发生/未发生等情况。

2. 位操作的用途

Redis提供了多种位操作命令,例如SETBITGETBITBITOP等,用于对位图进行操作。

  • 使用SETBIT可以设置特定位置的位的值,表示设备状态的改变。这可以用于记录设备状态的变化。

  • 使用GETBIT可以获取指定位置的位的值,用于查询设备状态。

  • 使用BITOP可以进行位操作,如与、或、异或等,以便对多个位图进行复杂的操作。

3. 实时设备状态跟踪

通过将每个设备映射到位图的特定位,您可以实时跟踪设备状态。当设备状态改变时,使用SETBIT命令来更新相应的位,这样您可以随时查询设备状态。

SETBIT device_status_bitmap 1231 1  # 将设备1231的状态设置为1(开启)

4. 设备状态统计

您可以使用位操作命令来执行设备状态的统计操作。例如,使用BITCOUNT命令来计算特定时间段内设备状态为1(开启)的设备数量。

BITCOUNT device_status_bitmap

5. 历史状态记录

通过定期保存位图的快照,您可以记录设备状态的历史。这对于分析设备状态的趋势和历史非常有用。您可以使用SAVEBGSAVE命令来持久化位图。

6. 清除旧状态

您可以使用DEL命令来清除不再需要的设备状态数据,以保持位图的大小可控。

7. 应用场景

Redis位图和位操作适用于各种应用场景,包括实时设备状态监控、用户在线状态跟踪、事件发生记录、设备故障检测等。

Redis位图和位操作是高性能的、内存高效的工具,非常适合用于设备状态的实时跟踪和统计。通过灵活使用这些功能,您可以有效地管理和了解设备的状态。

第五:基数统计->唯一计数的奥秘

Redis的HyperLogLog(HLL)数据结构是一种用于估算唯一元素数量的高性能、低内存消耗的方法。HLL非常适用于数据去重和基数统计,允许您估算一个数据集中的唯一元素数量,而不需要存储每个元素的详细信息。以下是对Redis HyperLogLog的详细讲解:

1. HyperLogLog基本原理

  • HyperLogLog使用概率统计方法,通过观察数据中的一部分元素来估算唯一元素的数量。它基于一种概率分布算法,能够在占用很少内存的情况下提供接近准确的估算。

  • HLL使用一个位数组(BitArray),每个位代表一个桶。位数组的大小可以根据需要进行调整,决定了HLL的准确性和内存占用。

  • 每次向HLL中添加元素时,HLL会计算该元素的哈希值,然后根据哈希值的二进制表示找到在位数组中的位置,并将位数组中的相应位设置为1。这就允许HLL记录每个元素的存在。

2. 估算唯一元素数量

  • HLL提供了PFADD命令来添加元素到HLL,以及PFCOUNT命令来估算HLL中的唯一元素数量。
PFADD myhll element1 element2 element3
PFCOUNT myhll  # 估算唯一元素的数量

3. 结合多个HLL

  • HLL支持使用PFMERGE命令将多个HLL结合在一起,以便合并多个数据集的唯一元素统计。
PFMERGE result_hll myhll1 myhll2 myhll3
PFCOUNT result_hll  # 估算合并后的唯一元素数量

4. 适用场景

  • HLL适用于需要估算唯一元素数量的场景,如数据去重、用户统计、热词统计、网站UV统计等。由于其内存效率和准确性,HLL在大数据集的情况下非常有用。

5. 准确性和内存消耗的权衡

  • HLL的准确性和内存消耗之间存在权衡关系。您可以通过调整位数组的大小来平衡准确性和内存占用。较小的位数组会消耗较少内存,但准确性较低;较大的位数组则提供更准确的估算,但占用更多内存。

Redis的HyperLogLog数据结构是一种出色的工具,可用于高效地估算唯一元素数量,适用于各种数据去重和基数统计的应用。在处理大规模数据时,它提供了内存效率和高性能。

第六:应用建议

以下是一些应用建议,以帮助读者更好地利用Redis集合统计功能:

1. 用户统计:

使用Redis集合统计功能来跟踪用户行为,如用户的点赞、收藏、评论等操作。每个用户的行为可以表示为一个集合,通过集合的交集、并集和差集操作,您可以轻松获取各种用户统计信息,如共同点赞的用户、共同收藏的用户等。

2. 热门内容统计:

对于网站或应用的热门内容,您可以使用Redis集合来记录每个内容的访问者。通过跟踪访问者的集合,您可以实时了解哪些内容最受欢迎,并相应地调整推荐策略。

3. 用户在线状态跟踪:

使用Redis集合来记录用户的在线状态。每个在线用户可以表示为集合的成员,您可以定期检查在线用户的数量,以了解当前在线用户数,或者查找特定用户是否在线。

4. 事件统计:

对于事件或活动的统计,Redis集合非常有用。例如,您可以使用集合来记录参加活动的用户,以及哪些用户参加了多个活动。这对于分析用户参与度和互动性非常有帮助。

5. 社交网络分析:

在社交网络应用中,您可以使用Redis集合来构建关注者和粉丝关系。通过集合的交集和并集操作,您可以查找共同关注的用户、共同粉丝等信息。

6. 网站UV统计:

使用Redis集合来记录网站的独立访客(UV)。每个访客可以表示为集合的成员,您可以使用集合的基数统计功能来估算UV数量。

7. 数据去重:

Redis集合可以用于数据去重,确保存储的数据不包含重复项。这对于日志记录、事件记录等情况非常有用。

8. 多集合操作:

在需要执行多集合操作时,如查找多个集合的交集或并集,可以使用Redis的SINTERSUNION等命令,这些命令可以帮助您快速获得所需的结果。

9. 性能优化:

为了保持性能,确保集合不会过大,适时清除不再需要的数据。另外,根据实际需求合理选择集合的数据结构,如有序集合(Sorted Set)或普通集合(Set)。

10. 数据持久化:

如果需要长期存储集合数据,考虑使用Redis的持久化机制,如RDB快照或AOF日志,以确保数据不会丢失。

通过合理地应用Redis集合统计功能,您可以在各种应用中获得有价值的统计信息,从而更好地了解用户行为、数据趋势和互动模式。 Redis的集合功能为这些应用提供了高效的解决方案。

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

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

相关文章

urlPattern配置和request

urlPattern配置 Servlet类编写好后,想要被访问到,就需要配置其访问路径(urlPattern) 一个Servlet可以配置多个urlPattern: WebServlet(urlPatterns{"/demo","/demo2"}) urlPattern配置…

html获取网络数据,列表展示 一

html获取网络数据&#xff0c;列表展示 js遍历json数组中的json对象 image.png || - 判断数据是否为空&#xff0c;为空就显示 - <!DOCTYPE html> <html><head><meta charset"utf-8"><title>网页列表</title></head><b…

FreeRTOS深入教程(空闲任务和Tick中断深入分析)

文章目录 前言一、空闲任务源码分析二、Tick中断深入分析总结 前言 本篇文章主要带大家深入分析空闲任务和Tick中断的作用。 一、空闲任务源码分析 在启动调度器时会创建出空闲任务&#xff1a; /* 启动调度器 */ vTaskStartScheduler();在空闲任务中会调用到prvCheckTasks…

k8s pod获取ip地址过程

在学习 Kubernetes 网络模型的过程中&#xff0c;了解各种网络组件的作用以及如何交互非常重要。本文就介绍了各种网络组件在 Kubernetes 集群中是如何交互的&#xff0c;以及如何帮助每个 Pod 都能获取 IP 地址。 Kubernetes 网络模型的核心要求之一是每个 Pod 都拥有自己的 …

oracle 重启步骤及踩坑经验

oracle 重启步骤及踩坑经验 标准重启步骤 切换到oracle用户 su - oracle关闭监听 lsnrctl stop杀掉oracle有关进程 ps -ef|grep $ORACLE_SID|grep -v ora_|grep LOCALNO|awk {print $2}|xargs kill -9#查询pid ps -ef|grep $ORACLE_SID|grep -v ora_|grep LOCALNO|awk {p…

Linux--jdk、tomcat、环境配置,mysql安装、后端项目搭建

前言 上期我们讲到了安装linux虚拟机&#xff0c;这期我们来讲一下如何使用xshell和xftp在linux系统上搭建我们的单体项目 一、软件的传输 1.1 xftp Xftp是一款功能强大的文件传输软件&#xff0c;用于在本地主机和远程服务器之间进行快速、安全的文件传输。它是由南京帆软科…

【MongoDB】Windows 安装MongoDB 6.0

一、下载安装包 安装包下载地址https://www.mongodb.com/try/download/community这里我选择的是 二、解压并安装 1、解压 这里我将压缩包解压到了D盘&#xff0c;并重命名成了mongodb&#xff0c;解压后的目录如下&#xff1a; 2、创建配置文件 在D:\mongodb下新建conf目录…

数据库面试题整理

目录 MySQL事务隔离级别有哪几种&#xff1f;MySQL的常用的存储引擎有哪些&#xff1f;特点是什么&#xff0c;分别适合什么场景下使用MySQL有数据缓存吗&#xff1f;原理是怎么样的&#xff1f;InnoDB的缓冲池默认是开启的吗&#xff1f;基本原理是什么&#xff1f;会有脏数据…

Flutter 01 目录结构入门

一、Flutter目录结构&#xff1a; 二、Flutter入口文件、入口方法&#xff1a; 三、Flutter Demo&#xff1a; demo1&#xff1a; import package:flutter/material.dart;//MaterialApp 和 Scaffold两个组件装饰App void main() {runApp(MaterialApp(home: Scaffold(appBar: A…

当函数参数为一级指针,二级指针

当函数参数为一级指针&#xff0c;二级指针 在讲述内容之前&#xff0c;先讲四点重要知识 1.当传入参数时&#xff0c;函数形参会立即申请形参的内存空间&#xff0c;函数执行完毕后&#xff0c;形参的内存空间立即释放掉。 1.指针是存放其他变量地址的变量。指针有自己的内…

腾讯云轻量应用镜像、系统镜像、Docker基础镜像、自定义镜像和共享镜像介绍

腾讯云轻量应用服务器镜像类型分为应用镜像、系统镜像、Docker基础镜像、自定义镜像和共享镜像&#xff0c;腾讯云百科txybk.com来详细说下不同镜像类型说明和详细介绍&#xff1a; 轻量应用服务器镜像类型说明 腾讯云轻量应用服务器 应用镜像&#xff1a;独有的应用镜像除了包…

[threejs]让导入的gltf模型显示边框

边框1效果图如下&#xff1a; 代码如下&#xff1a; const gltfLoader1 new GLTFLoader();gltfLoader1.load( "/assets/box/1/scene.gltf" ,function(gltf){let model gltf.scene;model.scale.set(3,3,3)// scene1.add(model);// renderer1.render(scene1, camera…

SaaS 出海,如何搭建国际化服务体系?(一)

防噎指南&#xff1a;这可能是你看到的干货含量最高的 SaaS 出海经验分享&#xff0c;请准备好水杯&#xff0c;放肆食用&#xff08;XD。 当越来越多中国 SaaS 企业选择开启「国际化」副本&#xff0c;出海便俨然成为国内 SaaS 的新角斗场。 LigaAI 观察到&#xff0c;出海浪…

CSS3表格和表单样式

在传统网页中&#xff0c;表格主要用于网页布局&#xff0c;因此也成为网页编辑的主要工具&#xff1b;在标准化网页设计中&#xff0c;表格的主要功能是显示数据&#xff0c;也可适当辅助结构设计。本章主要介绍如何使用CSS控制表格和表单的显示效果&#xff0c;如表格和表单的…

在ffmpeg中,如何把h264转换为rgb格式

在ffmpeg中&#xff0c;网络视频流h264为什么默认的转为YUV而不是其他格式 文章中介绍了&#xff0c;h264解码的时候是直接解码为yuv的&#xff0c;如果在使用的过程中 需要用到rgb的格式&#xff0c;我们该如何来转换这种格式呢&#xff1f; 在上面的文章中&#xff0c;我们已…

基于YOLOv8模型暗夜下人脸目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型暗夜下人脸目标检测系统可用于日常生活中检测与定位黑夜下人脸目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法…

塞尔帕替尼的靶点以及疗效【医游记】

&#xff08;图片来源于网络&#xff09; 塞尔帕替尼&#xff08;Selpercatinib&#xff09;是一种高选择性和抑制活性的小分子RET&#xff08;受体酪氨酸激酶&#xff09;抑制剂。它是全球首个获批的高选择性RET抑制剂&#xff0c;用于治疗RET融合阳性的转移性非小细胞肺癌的…

GNSS卫星姿态解算

GNSS卫星姿态影响太阳光压辐射力的建模与卫星天线改正&#xff0c;正确解算卫星姿态是GNSS数据解算中的关键步骤。 卫星的姿态指卫星的星体坐标轴XYZ在惯性系下的指向&#xff0c;其中Z轴始终指向地球地心&#xff0c;Y轴为卫星太阳能帆板的旋转轴&#xff0c;它始终与太阳-卫星…

CCF_A 计算机视觉顶会CVPR2024投稿指南以及论文模板

目录 CVPR2024官网&#xff1a; CVPR2024投稿链接&#xff1a; CVPR2024 重要时间节点&#xff1a; CVPR2024投稿模板: WORD: LATEX : CVPR2024_AuthorGuidelines CVPR2024投稿Topics&#xff1a; CVPR2024官网&#xff1a; https://cvpr.thecvf.com/Conferences/2024CV…

YouTrack 在创建问题的时候如何切换项目

最近在准备从 JIRA 中转换到 YouTrack 上。 在创建问题的时候&#xff0c;JIRA 是通过选择项目&#xff0c;然后单击创建&#xff0c;这个创建就会直接在项目中进行创建了。 但是 YouTrack 不是这样的&#xff0c;感觉就是 YouTrack 的创建问题就是一个入口。 其实我并不知道…