SRANDMEMBER

用法
SRANDMEMBER key [ count ]
复杂度
不带 count 参数时为 O(1),否则为 O(N),其中 N 是所传递 count 的绝对值。
始于
1.0.0
ACL 类别
@set, @read, @slow

当仅使用 key 参数调用时,从存储在 key 的集合值中返回一个随机元素。

如果提供的 count 参数为正,则返回一个包含不同元素的数组。数组的长度为 count 或集合的基数 (SCARD),取两者中较小的一个。

如果使用负数 count 调用,行为会改变,命令允许返回相同元素多次。在这种情况下,返回元素的数量是指定 count 的绝对值。

示例

127.0.0.1:6379> SADD myset one two three
(integer) 3
127.0.0.1:6379> SRANDMEMBER myset
"three"
127.0.0.1:6379> SRANDMEMBER myset 2
1) "one"
2) "three"
127.0.0.1:6379> SRANDMEMBER myset -5
1) "two"
2) "one"
3) "one"
4) "one"
5) "two"

传递 count 参数时的行为规范

count 参数为正值时,此命令的行为如下

  • 不返回重复元素。
  • 如果 count 大于集合的基数,命令将只返回整个集合,而不返回额外元素。
  • 回复中元素的顺序并非完全随机,因此如果需要,由客户端自行打乱。

count 为负值时,行为变化如下

  • 可能返回重复元素。
  • 总是返回精确的 count 个元素,如果集合为空(键不存在),则返回空数组。
  • 回复中元素的顺序是完全随机的。

RESP2 回复

以下之一

  • 批量字符串回复:不带额外 count 参数时,命令返回一个随机选择的成员,或者当 key 不存在时返回一个 Nil 回复

  • 数组回复:当传递可选的 count 参数时,命令返回一个成员数组,或者当 key 不存在时返回一个空数组。

RESP3 回复

以下之一

  • 批量字符串回复:不带额外 count 参数时,命令返回一个随机选择的成员,或者当 key 不存在时返回一个 Null 回复

  • 数组回复:当传递可选的 count 参数时,命令返回一个成员数组,或者当 key 不存在时返回一个空数组。

历史

版本 变更
2.6.0

增加了可选的 count 参数。