SRAND成员

语法
SRANDMEMBER key [count]
从以下位置开始可用:
1.0.0
时间复杂度:
如果没有 count 参数 O(1),否则为 O(N),其中 N 是传递的 count 的绝对值。
ACL 类别:
@read, @set, @slow,

当仅使用key参数,从存储在key.

如果提供的countargument 为正数,则返回一个包含不同元素的数组。 数组的长度为count或集合的基数 (SCARD),以较低者为准。

如果使用负数调用count,则行为会发生变化,并且允许该命令多次返回同一元素。 在这种情况下,返回的元素数是指定count.

例子

SADD myset 一二三 SRANDMEMBER myset SRANDMEMBER myset 2 SRANDMEMBER myset -5

传递 count 时的行为规范

countargument 为正值,此命令的行为如下:

  • 不会返回重复的元素。
  • 如果count大于集合的基数,则该命令将仅返回整个集合,而不返回其他元素。
  • 回复中元素的顺序并不是真正随机的,因此如果需要,由客户端对它们进行随机排序。

count为负值,则行为将更改如下:

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

返回元素的分布

注意:本节仅适用于 Redis 5 或更低版本,因为 Redis 6 实现了更公平的算法。

当集合中的元素数量很少时,返回元素的分布远非完美,这是因为我们使用了近似随机元素函数,这并不能真正保证良好的分布。

使用的算法在 dict.c 中实现,对哈希表存储桶进行采样以查找非空存储桶。找到非空存储桶后,由于我们在哈希表实现中使用了链接,因此会检查存储桶内的元素数量并选择一个随机元素。

这意味着,如果整个哈希表中有两个非空存储桶,一个有三个元素,而一个只有一个元素,则返回其存储桶中唯一的元素的概率要高得多。

RESP2 回复

以下选项之一:

  • 批量字符串回复:如果没有额外的 count 参数,该命令将返回随机选择的成员,或者在 key 不存在时返回 Nil 回复
  • 数组回复:当传递可选的 count 参数时,该命令返回一个成员数组,当 key 不存在时返回一个空数组。

RESP3 回复

以下选项之一:

  • 批量字符串回复:如果没有额外的 count 参数,该命令将返回随机选择的成员,或者在 key 不存在时返回 Null 回复
  • 数组回复:当传递可选的 count 参数时,该命令返回一个成员数组,当 key 不存在时返回一个空数组。

历史

  • 从 Redis 版本 2.6.0 开始:添加了可选的count论点。
为本页评分
返回顶部 ↑