Redis 基础教程

Redis 命令

Redis 高级教程

Redis 笔记

Redis SRANDMEMBER 命令

Redis 集合(Sets) Redis 集合(Sets)


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>