首页/数据/数据库速查/ZCARD / ZCOUNT 规模统计
Redis 命令96 条

ZCARD / ZCOUNT 规模统计

ZCARD 返回成员总数,ZCOUNT 返回分数区间内成员数;都是常用的监控与「是否存在」判断入口。

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

ZCARD 与 ZCOUNT 是什么

ZCARD 返回有序集合的成员总数,复杂度 O(1);ZCOUNT 返回分数落在指定区间内的成员数,复杂度 O(log N)。两者都不返回成员本身,只做规模统计,是监控大盘、限流判断与「窗口内有多少条」的标准入口。

基本信息

ZCARD有序集合成员总数,O(1)
ZCOUNT分数区间内的成员数,O(log N)
区间标记默认闭区间,前置圆括号表示开区间,如 (150
无穷端点-inf 与 +inf 表示负无穷与正无穷
相关命令ZLEXCOUNT 按字典序区间统计成员数

典型使用场景

  • 监控大盘:定时采集排行榜或队列的规模,画趋势图
  • 滑动窗口限流:分数存请求时间戳,用 ZCOUNT 统计窗口内请求数
  • 到期任务统计:分数存到期时间,统计即将到期的任务有多少
  • 排行榜参与度:统计分数高于某个门槛的成员数量,用于发奖口径核对
  • 延迟队列水位:统计区间任务数,判断消费能力是否跟得上生产速度

统计示例

统计示例
ZADD board 100 u1 200 u2 300 u3
ZCARD board                # 3,成员总数
ZCOUNT board 150 350       # 分数 150 到 350 的成员数
ZCOUNT board -inf +inf     # 等于 ZCARD
ZCOUNT board (150 +inf     # 大于 150 的成员数,圆括号表示开区间
# 时间戳做滑动窗口:统计最近 60 秒的请求数
ZCOUNT rate:u1 $(( $(date +%s%3N) - 60000 )) +inf

输出逐列读法

结果含义注意
整数满足条件的成员数量键不存在时返回 0,不报错
0区间内没有成员或键不存在与键类型错误要区分开
错误返回对非有序集合执行会报类型错误先确认键类型再统计
滑动窗口限流的经典实现:ZREMRANGEBYSCORE 清理过期成员、ZADD 写入当前请求、ZCARD 或 ZCOUNT 判断窗口内数量,三步用 Lua 保证原子。
ZCOUNT 的边界是闭区间,判断「大于 150」必须写成 (150,漏掉圆括号会多算边界成员。

选择建议

  • 只问总数用 ZCARD,它不遍历任何成员,性能与集合大小无关
  • 问区间用量 ZCOUNT,分数必须能比较大小,字符串编码的分数要先用整数
  • 只需要「是否存在交集」这类布尔判断:配合 LIMIT 参数可以提前停止计算

易错点

  • 用 ZCARD 判断某个成员是否存在:它只统计总量,应改用 ZSCORE 或 ZRANK
  • ZCOUNT 区间忘记开区间标记:边界成员被重复计入,限流阈值失真
  • 把时间戳当分数但单位混用秒与毫秒:窗口范围算错,限流形同虚设
  • 在大集合上高频调用 ZCOUNT 做监控:采集频率过高本身会带来压力,应按需降频

数据来源与参考

  • Redis 官方文档: ZCARD
  • Redis 官方文档: ZCOUNT

相关工具

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