*Redis SMEMBERS 命令 获取集合中的所有成员
*语法
SMEMBERS key
*说明
返回存储在 key 的 Set 集合中的所有成员(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 — 检查多个成员是否在集合中