Redis SRANDMEMBER 命令从集合 key 中返回随机元素,而不对集合进行任何改动。该操作和 SPOP 相似,但 SPOP 将随机元素从集合中移除并返回。
该命令也和 RANDOMKEY 命令稍类似,RANDOMKEY 命令是在当前数据库范围内获取随机 key,而 SRANDMEMBER 命令是从指定集合 key 中返回随机成员。
命令格式
SRANDMEMBER key [count]
可用版本:>=1.0.0
时间复杂度:只提供 key 参数时为 O(1);如果提供了 count 参数,那么为 O(N),N 为返回数组的元素个数。
历史版本
从 Redis 2.6 版本开始,SRANDMEMBER 命令接受可选的 count 参数:
- 如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。
- 如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。
命令返回值
SRANDMEMBER 命令返回有 3 种情况:
- 当指定 key 存在且集合类型时,返回随机成员。
- 当指定 key 不存在时,返回 nil。
- 当指定 key 为非集合类型时,返回命令与操作类型不匹配的错误信息。
示例
redis> SADD myset one two three
(integer) 3
redis> SRANDMEMBER myset # 指定 key 存在且集合类型时,返回随机成员
"three"
redis> SRANDMEMBER myset 2
1) "one"
2) "three"
redis> SRANDMEMBER myset -5
1) "three"
2) "one"
3) "one"
4) "two"
5) "one"
redis> SRANDMEMBER noexistkey # 指定 key 不存在时,返回 nil
(nil)
redis> SET knowledge dict
OK
redis> SRANDMEMBER knowledge # 指定 key 为非集合类型时,返回命令与操作类型不匹配的错误信息
(error) WRONGTYPE Operation against a key holding the wrong kind of value
redis>