首页/数据/数据库速查/SINTER / SINTERCARD 交集运算
Redis 命令96 条

SINTER / SINTERCARD 交集运算

求多个集合的交集:SINTER 直接返回结果,SINTERSTORE 存到目标键,SINTERCARD(7.0+)只要个数并支持 LIMIT 提前截断。

数据库速查数据更新于 2026-10-13

集合交集运算是什么

求多个集合的交集有三种用法:直接返回结果、把结果存到目标键、或只返回交集元素个数。第三种(较新版本提供的基数版)还支持限制数量,在「只关心有没有交集」或「只需要大概多少」时能提前结束计算,省掉全量遍历。

基本信息

返回交集SINTER 键 键 …,直接给结果
存储交集SINTERSTORE 目标键 键 键 …,结果写入新键
基数交集SINTERCARD 集合数 键 键 …,可加数量限制
计算规模与参与集合中最小集合的规模相关
空集合影响任一集合为空则交集为空

典型使用场景

  • 共同关注与共同好友:两个用户关注集合求交集
  • 标签筛选:命中多个标签的内容取交集,实现多条件筛选
  • 权限校验:用户权限与所需权限求交集,判断是否满足
  • 活动人群圈选:多个条件人群求交集生成定向名单
  • 数量判断:只需要知道是否为空的场景用基数版并加限制

示例

示例
SADD follow:A u2 u3 u4
SADD follow:B u3 u4 u5
SCARD follow:A                       # 先看规模
SINTER follow:A follow:B             # 交集:u3 u4
SINTERSTORE common:AB follow:A follow:B   # 结果存键,返回交集个数
EXPIRE common:AB 3600                # 临时结果键务必设过期
SINTERCARD 2 follow:A follow:B       # 只要交集个数
SINTERCARD 2 follow:A follow:B LIMIT 10   # 数到 10 个即返回,提前结束

命令对照

命令返回适用
返回交集交集成员数组需要具体成员列表
存储交集交集元素个数,同时写入目标键结果要复用或多次读取
基数交集交集元素个数只关心数量
基数交集加限制达到限制即返回只判断是否有交集
交集的计算量取决于参与集合的规模:把大集合两两求交集,会显著占用实例的计算时间。
存储交集产生的临时键如果不设过期:结果会长期驻留内存,日积月累成为容量问题。

设计前确认三件事

  • 确认集合规模:交集代价取决于最小集合的大小,大集合要评估计算时间
  • 确认结果用途:只需判断有无交集时优先用带数量限制的基数版本
  • 确认失效时机:集合变更后旧结果立即失真,缓存结果要能失效或更新

易错点

  • 大集合直接两两求交集:单命令阻塞明显,尽量预计算存储结果或加数量限制
  • 存储结果的临时键不设过期:长期占内存,逐渐堆积成大键
  • 把交集结果当稳定数据依赖:集合每次变更都会让结果变化,要注意失效时机
  • 用交集实现「是否存在」判断:数量限制版本更省资源,没必要全量计算

数据来源与参考

  • Redis 官方文档: SINTER
  • Redis 官方文档: SINTERCARD

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌