*Redis SMEMBERS 命令 获取集合中的所有成员

*语法

SMEMBERS key

*说明

返回存储在 keySet 集合中的所有成员(members)。

如果 key 不存在,返回空数组。

如果 key 存在但存储的不是 Set 类型,则返回错误。

重要提示:SMEMBERS 返回的成员顺序是不确定的(unspecified order)。Set 是无序集合,每次调用 SMEMBERS 返回的顺序可能不同。如果需要有序结果,应使用 Sorted Set(ZSET)。

对于成员数量非常大的集合,建议使用 SSCAN 进行增量迭代,以避免阻塞 Redis 服务器并减少网络传输量。

*返回值

  • Array:集合中所有成员的列表(无序)。空集合返回空数组。

*时间复杂度

  • O(N),其中 N 是集合的成员数量。SMEMBERS 需要遍历整个集合。

*版本兼容性

Redis 版本 变更说明
>= 1.0.0 初始支持

*示例

*示例 1:获取集合的所有成员

SADD fruits "apple" "banana" "cherry"
# 返回:(integer) 3

SMEMBERS fruits
# 返回:1) "cherry"  2) "apple"  3) "banana"(顺序随机)

*示例 2:空集合

# key 不存在
SMEMBERS empty_set
# 返回:(empty array)

# 创建后移除所有成员
SADD temp "x"
# 返回:(integer) 1

SREM temp "x"
# 返回:(integer) 1

SMEMBERS temp
# 返回:(empty array)

*示例 3:重复添加不影响返回结果

SADD colors "red"
# 返回:(integer) 1

SADD colors "red"
# 返回:(integer) 0

SADD colors "green" "blue"
# 返回:(integer) 2

SMEMBERS colors
# 返回:1) "red"  2) "green"  3) "blue"(顺序随机)

*示例 4:查看在线用户列表

# 模拟用户上线
SADD online_users "alice" "bob" "charlie"
# 返回:(integer) 3

# 获取当前所有在线用户
SMEMBERS online_users
# 返回:1) "alice"  2) "bob"  3) "charlie"(顺序随机)

# 新用户上线
SADD online_users "dave"
# 返回:(integer) 1

SMEMBERS online_users
# 返回:1) "alice"  2) "bob"  3) "charlie"  4) "dave"(顺序随机)

*相关命令

  • SSCAN — 增量迭代集合中的成员(推荐用于大数据集)
  • SCARD — 返回集合的成员数量
  • SISMEMBER — 检查单个成员是否在集合中
  • SMISMEMBER — 检查多个成员是否在集合中