首页/数据/数据库速查/SINTERCARD 交集基数(不生成结果集)
Redis 命令96 条

SINTERCARD 交集基数(不生成结果集)

SINTERCARD 直接返回多个集合交集的基数,不生成结果集,支持 LIMIT 提前终止;7.0 新增,替代「SINTERSTORE 后再 SCARD」的旧写法。

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

SINTERCARD 是什么

SINTERCARD 直接返回多个集合交集的元素个数(基数),不生成结果集,也不需要临时键。7.0 起提供,替代了过去「先 SINTERSTORE 落库、再 SCARD 计数、最后删临时键」的繁琐写法。它还支持 LIMIT 参数提前终止:只要交集大小达到上限就立即返回,适合「是否至少共同 N 个」这类判断。语法首位必须写集合个数 numkeys。

基本信息

语法SINTERCARD numkeys key [key ...] [LIMIT n]
返回交集元素个数;使用 LIMIT 时最多返回该上限值
numkeys首位必填,且必须与实际键数量一致
LIMIT0 表示不限制;达到上限即提前返回
版本Redis 7.0 及以上

典型使用场景

  • 共同标签判断:两个用户标签集合是否有足够多的共同项
  • 条件筛选计数:多个筛选条件的交集规模,用于展示「符合条件的数量」
  • 规则校验:判断某组合是否满足「至少包含 N 个必需项」
  • 省内存统计:不需要交集成员列表,只要数量时避免生成临时键
  • 限流判断:用 LIMIT 1 快速判断是否存在交集,命中即返回

用法示例

用法示例
SADD s1 a b c d
SADD s2 b c d e
# 交集基数:b、c、d 共 3 个
SINTERCARD 2 s1 s2
# 加 LIMIT:达到上限就停,返回的是上限值不是真实总数
SINTERCARD 2 s1 s2 LIMIT 2
# 旧写法对照:需要生成临时键,再计数再删除
SINTERSTORE tmp s1 s2
SCARD tmp
DEL tmp
# 确认集合内容
SMEMBERS s1

参数读法

参数含义注意
numkeys参与运算的集合个数写在最前面,与实际键数不一致会报错
key ...参与交集的集合键集群下需同槽,否则报跨槽错误
LIMIT n最多数到 n 个就返回返回上限值,不代表真实交集大小
LIMIT 0不限制,返回真实基数大集合下耗时较长
计算成本与集合规模相关:元素规模很大时单条命令会长时间占用主线程。高并发场景应先把集合规模收敛,或改为离线计算后读取结果。
LIMIT 的语义要记清:返回达到上限就停,结果值等于上限,只能说明「至少这么多」。需要精确基数时不要使用 LIMIT。

易错点

  • 漏写或写错 numkeys:参数错位直接报语法错误,这是该命令最常见的调用错误
  • 把 LIMIT 的结果当真实交集大小:返回的是「至少这么多」,用于展示精确数量会出错
  • 在 7.0 之前的实例使用:报未知命令,需要升级或用旧的 STORE 加计数组合
  • 对大集合直接调用:规模大时阻塞主线程,业务侧应先控制集合大小
  • 集群下键不同槽:多键必须落在同一哈希槽,否则报跨槽错误

数据来源与参考

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

相关工具

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