Redis 的 SRANDMEMBER 命令,如果命令执行时,只提供了 KEY 参数,那么返回 集合 中的一个随机元素。从 Redis 2.6 版本开始, SRANDMEMBER 命令接受可选的 count 参数:
该操作和 SPOP 相似,但 SPOP 将随机元素从集合中移除并返回,而 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 参数,返回 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 参数,返回 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 参数,返回 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,返回不重复的元素
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,返回可能重复的元素
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 参数大于集合元素数,返回整个集合
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 绝对值大于集合元素数,返回重复的元素
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 命令,如果命令执行时,只提供了 KEY 参数,那么返回集合中的一个随机元素。Redis SRANDMEMBER 命令语法:
192.168.98.70:6379> SRANDMEMBER KEY [count]