首页/数据/数据库速查/SMEMBERS 全量成员
Redis 命令96 条

SMEMBERS 全量成员

返回集合所有成员(无序);集合大时全量返回同样是阻塞与带宽风险,遍历请用 SSCAN。

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

SMEMBERS 是什么

返回集合的全部成员,顺序不保证。集合的语义就是无序,所以这个命令适合「一次拿全量做去重、校验或同步」,不适合分页展示。当集合规模很大时,一次拉取全部成员会同时压垮内存与网络,遍历应改用游标式的扫描命令。

基本信息

命令SMEMBERS 键,返回全部成员数组
复杂度与成员数量线性相关
顺序不保证,多次调用顺序可能不同
规模查询SCARD 先看成员总数,再决定用哪种遍历方式
安全遍历SSCAN 键 游标 COUNT 数量,分批返回

典型使用场景

  • 小集合直接取全量:标签、白名单、权限点这类规模可控的集合
  • 去重校验:拉取成员与另一数据源比对差异
  • 缓存预热:把集合内容一次性同步到本地内存
  • 运维核对:确认某业务集合的成员是否与预期一致
  • 大集合替代方案:改用扫描命令分批遍历,或改用有序集合

示例

示例
SADD online:u 1001 1002 1003
SMEMBERS online:u            # 返回 3 个成员,顺序不保证
SCARD online:u               # 先看规模,返回 3
SISMEMBER online:u 1001      # 判断单个成员是否存在,O(1)
# 大集合遍历:游标分批扫描
SSCAN online:u 0 COUNT 500
# 需要有序遍历时改用有序集合
ZADD rank:online 1 1001 2 1002
ZRANGE rank:online 0 -1

输出逐列读法

返回含义注意
成员数组集合的全部成员顺序不保证,不能依赖下标
空数组集合不存在或为空两种情况的返回一致,需另行判断
游标与批次扫描命令返回新游标与成员片段游标为 0 表示遍历结束
成员判断结果存在返回 1,不存在返回 0判断单个成员用它比拉全量高效
扫描命令只保证遍历完整,不保证同一批次的成员稳定:期间新增或删除的成员可能出现也可能不出现。
对百万级集合直接取全量:单条命令同时拉爆实例内存与网络带宽,还可能阻塞其他请求。

易错点

  • 对超大集合直接取全量:内存与网络双爆,实例出现长阻塞
  • 把返回结果当有序数据做分页:顺序不稳定,翻页出现重复或缺失
  • 用拉全量再判断成员是否存在:应直接用存在性判断命令,成本相差一个数量级
  • 把集合当队列用:集合无序且不记录顺序,弹出逻辑无法实现

数据来源与参考

  • Redis 官方文档: SMEMBERS

相关工具

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