Redis SRANDMEMBER命令

Redis SRANDMEMBER命令教程

Redis 的 SRANDMEMBER 命令,如果命令执行时,只提供了 KEY 参数,那么返回 集合 中的一个随机元素。从 Redis 2.6 版本开始, SRANDMEMBER 命令接受可选的 count 参数:

  • 如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,且数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。
  • 如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。

该操作和 SPOP 相似,但 SPOP 将随机元素从集合中移除并返回,而 SRANDMEMBER 则仅仅返回随机元素,而不对集合进行任何改动。

Redis SRANDMEMBER命令详解

语法

192.168.98.70:6379> SRANDMEMBER KEY [count]

参数

参数 描述
KEY 要返回随机元素的集合的键。
count 可选,返回元素的个数。

返回值

如果只提供 KEY 参数时,返回一个元素;如果集合为空,返回 nil 。如果提供了 count 参数,那么返回一个数组;如果集合为空,返回空数组。

时间复杂度

只提供 KEY 参数时为 O(1) 。如果提供了 count 参数,那么为 O(N) ,N 为返回数组的元素个数。

可用版本

>= 1.0.0

案例

KEY不存在,无COUNT参数

KEY 不存在,无 COUNT 参数,返回 nil

192.168.98.70:6379> SCARD haicoder (integer) 0 192.168.98.70:6379> SRANDMEMBER haicoder (nil)

我们首先,使用 SCARD 命令,获取键为 haicoder 的集合的元素个数,返回 0,即集合不存在。最后,我们使用 SRANDMEMBER 命令,获取集合 haicoder 中的任意一个元素,返回 nil。

KEY不存在,有COUNT参数

KEY 不存在,有 COUNT 参数,返回 nil

192.168.98.70:6379> SCARD haicoder (integer) 0 192.168.98.70:6379> SRANDMEMBER haicoder 10 (empty list or set)

我们首先,使用 SCARD 命令,获取键为 haicoder 的集合的元素个数,返回 0,即集合不存在。最后,我们使用 SRANDMEMBER 命令,获取集合 haicoder 中的任意 10 个元素,返回空集合。

KEY存在,无COUNT参数

KEY 存在,无 COUNT 参数,返回 nil

192.168.98.70:6379> SADD haicoder Redis Mongo Mysql SqlServer (integer) 4 192.168.98.70:6379> SRANDMEMBER haicoder "Mysql" 192.168.98.70:6379> SRANDMEMBER haicoder "Mysql" 192.168.98.70:6379> SRANDMEMBER haicoder "Mongo" 192.168.98.70:6379> SRANDMEMBER haicoder "SqlServer" 192.168.98.70:6379> DEL haicoder (integer) 1

我们首先,使用 SADD 命令,向键为 haicoder 的集合中添加 4 个元素。使用 SRANDMEMBER 命令,随机获取集合 haicoder 中一个元素,返回元素 Mysql。

接着,我们使用 SRANDMEMBER 命令,随机获取集合 haicoder 中一个元素,返回元素 Mysql。再次,使用 SRANDMEMBER 命令,随机获取集合 haicoder 中一个元素,返回元素 Mongo。

最后,我们使用 SRANDMEMBER 命令,随机获取集合 haicoder 中一个元素,返回元素 SqlServer。

KEY存在,COUNT参数大于0

KEY 存在,COUNT 参数大于 0,返回不重复的元素

192.168.98.70:6379> SADD haicoder Redis Mongo Mysql SqlServer (integer) 4 192.168.98.70:6379> SRANDMEMBER haicoder 2 1) "Redis" 2) "SqlServer" 192.168.98.70:6379> SRANDMEMBER haicoder 2 1) "Redis" 2) "Mongo" 192.168.98.70:6379> SRANDMEMBER haicoder 2 1) "Redis" 2) "Mysql" 192.168.98.70:6379> SRANDMEMBER haicoder 2 1) "Redis" 2) "Mongo" 192.168.98.70:6379> SRANDMEMBER haicoder 2 1) "Mysql" 2) "SqlServer" 192.168.98.70:6379> SRANDMEMBER haicoder 2 1) "Redis" 2) "Mysql" 192.168.98.70:6379> SRANDMEMBER haicoder 2 1) "Mongo" 2) "Mysql" 192.168.98.70:6379> DEL haicoder (integer) 1

我们首先,使用 SADD 命令,向键为 haicoder 的集合中添加 4 个元素。使用 SRANDMEMBER 命令,加上 count 参数为 2 ,即随机获取集合 haicoder 中 2 个不重复的元素。

最后,我们发现 SRANDMEMBER 命令执行了七次,每次返回的 2 个元素都不重复。

KEY存在,COUNT参数小于0

KEY 存在,COUNT 参数小于 0,返回可能重复的元素

192.168.98.70:6379> SADD haicoder Redis Mongo Mysql SqlServer (integer) 4 192.168.98.70:6379> SRANDMEMBER haicoder -2 1) "SqlServer" 2) "SqlServer" 192.168.98.70:6379> SRANDMEMBER haicoder -2 1) "SqlServer" 2) "Mysql" 192.168.98.70:6379> SRANDMEMBER haicoder -2 1) "Mysql" 2) "Mongo" 192.168.98.70:6379> SRANDMEMBER haicoder -2 1) "Mongo" 2) "SqlServer" 192.168.98.70:6379> SRANDMEMBER haicoder -2 1) "Mysql" 2) "SqlServer" 192.168.98.70:6379> SRANDMEMBER haicoder -2 1) "SqlServer" 2) "Mongo" 192.168.98.70:6379> SRANDMEMBER haicoder -2 1) "Mongo" 2) "Mongo" 192.168.98.70:6379> DEL haicoder (integer) 1

我们首先,使用 SADD 命令,向键为 haicoder 的集合中添加 4 个元素。使用 SRANDMEMBER 命令,加上 count 参数为 -2 ,即随机获取集合 haicoder 中 2 个可重复的元素。

最后,我们发现SRANDMEMBER 命令执行了七次,其中有两次返回的 2 个元素是重复的。

KEY存在,COUNT参数大于集合元素数

KEY 存在,COUNT 参数大于集合元素数,返回整个集合

192.168.98.70:6379> SADD haicoder Redis Mongo Mysql SqlServer (integer) 4 192.168.98.70:6379> SRANDMEMBER haicoder 10 1) "Redis" 2) "Mongo" 3) "Mysql" 4) "SqlServer" 192.168.98.70:6379> SRANDMEMBER haicoder 10 1) "Redis" 2) "Mongo" 3) "Mysql" 4) "SqlServer" 192.168.98.70:6379> DEL haicoder (integer) 1

我们首先,使用 SADD 命令,向键为 haicoder 的集合中添加 4 个元素。接着,使用 SRANDMEMBER 命令,加上 count 参数为 10 ,此时 count 参数大于集合的最大元素数,所以返回了整个集合。

最后,我们再次执行 SRANDMEMBER 命令同样返回了整个集合。

KEY存在,COUNT绝对值大于集合元素数

KEY 存在,COUNT 绝对值大于集合元素数,返回重复的元素

192.168.98.70:6379> SADD haicoder Redis Mongo Mysql SqlServer (integer) 4 192.168.98.70:6379> SRANDMEMBER haicoder -10 1) "SqlServer" 2) "SqlServer" 3) "SqlServer" 4) "SqlServer" 5) "SqlServer" 6) "Mysql" 7) "Mongo" 8) "Redis" 9) "Mongo" 10) "Mongo" 192.168.98.70:6379> SRANDMEMBER haicoder -10 1) "SqlServer" 2) "Mongo" 3) "Mysql" 4) "SqlServer" 5) "Redis" 6) "Redis" 7) "Mysql" 8) "Mysql" 9) "Mongo" 10) "Mongo" 192.168.98.70:6379> DEL haicoder (integer) 1

我们首先,使用 SADD 命令,向键为 haicoder 的集合中添加 4 个元素。

接着,使用 SRANDMEMBER 命令,加上 count 参数为 -10 ,此时 count 参数是负数,且其绝对值大于集合的最大元素数,此时返回了超过集合元素数的元素。

最后,我们再次执行 SRANDMEMBER 命令同样返回了超过集合元素数的元素。

Redis SRANDMEMBER命令总结

Redis 的 SRANDMEMBER 命令,如果命令执行时,只提供了 KEY 参数,那么返回集合中的一个随机元素。Redis SRANDMEMBER 命令语法:

192.168.98.70:6379> SRANDMEMBER KEY [count]