当前位置: 首页 > news >正文

Redis 难懂命令-- ZINTERSTORE

**背景:**学习的过程中 常用的redis命令都能快速通过官方文档理解 但是还是有一些比较难懂的命令

**目的:**写博客记录一下(当然也可以使用AI搜索)

在Redis中,ZINTERSTORE 是一个用于计算多个有序集合(Sorted Set)交集的命令,其主要功能是将多个有序集合的交集结果存储到一个新的有序集合中。以下是关于 ZINTERSTORE 的详细用法和相关说明:


1. 基本语法

ZINTERSTORE 的语法如下:

ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
  • destination:目标键,用于存储交集结果。
  • numkeys:参与交集运算的有序集合数量。
  • key:参与交集运算的有序集合的键。
  • WEIGHTS:为每个有序集合的成员分数指定权重,用于加权计算。
  • AGGREGATE:指定交集中成员的分数计算方式,可选值为 SUMMINMAX

2. 功能说明

  • 交集运算ZINTERSTORE 会计算所有指定有序集合的交集,即只保留那些在所有输入集合中都存在的成员。

  • 分数计算:

    • 默认值(SUM) :交集结果中每个成员的分数是所有输入集合中该成员分数的总和。
    • MIN:交集结果中每个成员的分数是所有输入集合中该成员分数的最小值。
    • MAX:交集结果中每个成员的分数是所有输入集合中该成员分数的最大值。

3. 示例

示例1:基本用法
ZADD srcset1 5 M 6 N 7 O
ZADD srcset2 3 N 2 O 4 P
ZINTERSTORE desset 2 srcset1 srcset2
ZRANGE desset 0 -1 WITHSCORES

输出

1) "N"
2) "9"
3) "O"
4) "9"

在这个示例中,desset 存储了 srcset1srcset2 的交集结果,并且每个成员的分数是两个集合中对应分数的总和。

示例2:使用权重
ZADD srcset1 5 M 6 N 7 O
ZADD srcset2 3 N 2 O 4 P
ZINTERSTORE desset 2 srcset1 srcset2 WEIGHTS 2 3
ZRANGE desset 0 -1 WITHSCORES

输出

1) "N"
2) "15"
3) "O"
4) "13"

在这个示例中,srcset1 的权重为 2,srcset2 的权重为 3,每个成员的分数是两个集合中对应分数乘以权重后的总和。

示例3:使用MIN聚合
ZADD srcset1 5 M 6 N 7 O
ZADD srcset2 3 N 2 O 4 P
ZINTERSTORE desset 2 srcset1 srcset2 AGGREGATE MIN
ZRANGE desset 0 -1 WITHSCORES

输出

1) "N"
2) "6"
3) "O"
4) "7"

在这个示例中,desset 存储了 srcset1srcset2 的交集结果,并且每个成员的分数是两个集合中对应分数的最小值。


4. 注意事项

  • 键类型检查:如果任何输入键不是有序集合(Sorted Set),ZINTERSTORE 会返回错误。

  • 结果覆盖:如果目标键 destination 已经存在,ZINTERSTORE 会覆盖该键的内容。

  • 性能优化ZINTERSTORE 的时间复杂度为 O(N * log M),其中 N 是输入集合的基数, M 是输出集合的基数。可以通过减少输入集合的数量或结果集的大小来优化性能 。

img

5. 应用场景

  • 数据交集:用于查找多个数据集中的共同元素。
  • 数据聚合:用于计算多个数据集中的最小值或最大值。
  • 数据分析:用于分析不同数据集之间的关系,例如用户行为分析、商品推荐等。

6. 总结

ZINTERSTORE 是 Redis 中一个非常强大的命令,用于计算多个有序集合的交集,并将结果存储到一个新的有序集合中。通过合理使用 WEIGHTSAGGREGATE 参数,可以实现灵活的分数计算和数据聚合。在实际应用中,ZINTERSTORE 可以用于数据交集、数据聚合、数据分析等多个场景。

http://www.xdnf.cn/news/735751.html

相关文章:

  • mysql怎么查询longblob类型数据的大小
  • 小程序33-列表渲染
  • 彻底解决Win11文件资源管理器预览窗格无法预览问题
  • 使用lombok使用自动生成构造方法进行依赖注入
  • KAG进化论:从知识增强到Ai AGENT超级智能体+MOE专家模型将如何引爆下一代AI?
  • 31、请求处理@MatrixVariable与UrlPathHelper
  • PCIe-PCI、PCIe中断机制概述
  • 怎么在window上打开ubuntu虚拟机?
  • 小黑大语言模型通过设计demo进行应用探索:langchain中chain的简单理解demo
  • 事件不触发、交互失效?基于 WebDebugX 的移动端事件调试实战总结
  • 帕金森常见情况解读
  • Cypress API 中文详解
  • 主机号全0,代表网络本身地址; 主机号全1,代表广播地址
  • NLP学习路线图(十二):停用词处理
  • Redis 数据恢复的月光宝盒,闪回到任意指定时间
  • 我的世界服务端搭建
  • 将图片存为二进制流到数据库并展示到前端的实现
  • 深入理解数组索引:原理、应用与优化
  • Centos7系统下脚本一键部署LAMP环境
  • 响应式原理
  • Java异常与错误:核心区别深度解析
  • Kafka多线程Consumer
  • harmonyos实战关于静态图片存放以及image图片引入
  • VSCode Trae Cursor 显示多tab界面
  • intra-mart执行java方法笔记
  • spring openfeign
  • AWS云创建安全审计用户组
  • TIDB创建索引失败 mkdir /tmp/tidb/tmp_ddl-4000/1370: no such file or directory.
  • NHANES指标推荐:CQI
  • ESP32对接巴法云实现配网