SRANDMEMBER:随机地获取集合中的元素
通过使用 SRANDMEMBER
命令,用户可以从集合里面随机地获取指定数量的元素。SRANDMEMBER
命令接受一个可选的 count
参数,用于指定用户想要获取的元素数量,如果用户没有给定这个参数,那么 SRANDMEMBER
命令默认只获取一个元素:
- SRANDMEMBER set [count]
需要注意的一点是,被 SRANDMEMBER
命令返回的元素仍然会存在于集合当中,它们不会被移除。
举个例子,对于包含以下元素的 databases
集合来说:
- redis> SMEMBERS databases
- 1) "Neo4j"
- 2) "Redis"
- 3) "PostgreSQL"
- 4) "CouchDB"
- 5) "Oracle"
- 6) "MS SQL"
- 7) "MongoDB"
- 8) "MySQL"
我们可以使用 SRANDMEMBER
命令去随机地获取集合包含的元素:
- redis> SRANDMEMBER databases
- "MySQL"
- redis> SRANDMEMBER databases
- "PostgreSQL"
- redis> SRANDMEMBER databases
- "Neo4j"
- redis> SRANDMEMBER databases
- "CouchDB"
再次提醒,SRANDMEMBER
命令不会移除被返回的集合元素,这一点可以通过查看 databases
集合包含的元素来确认:
- redis> SMEMBERS databases -- 集合包含的元素和执行 SRANDMEMBER 之前完全一样
- 1) "Neo4j"
- 2) "Redis"
- 3) "PostgreSQL"
- 4) "CouchDB"
- 5) "Oracle"
- 6) "MS SQL"
- 7) "MongoDB"
- 8) "MySQL"
返回指定数量的元素
通过可选的 count
参数,用户可以指定 SRANDMEMBER
命令返回的元素数量,其中 count
参数的值既可以是正数也可以是负数。
如果 count
参数的值为正数,那么 SRANDMEMBER
命令将返回 count
个不重复的元素:
- redis> SRANDMEMBER databases 2 -- 随机地返回两个不重复的元素
- 1) "MySQL"
- 2) "Oracle"
- redis> SRANDMEMBER databases 3 -- 随机地返回三个不重复的元素
- 1) "PostgreSQL"
- 2) "Oracle"
- 3) "MS SQL"
当 count
参数的值大于集合包含的元素数量时,SRANDMEMBER
命令将返回集合包含的所有元素:
- redis> SRANDMEMBER databases 10
- 1) "Neo4j" -- 因为 databases 集合的元素数量少于 10 个
- 2) "Redis" -- 所以命令会返回集合包含的全部 8 个元素
- 3) "PostgreSQL"
- 4) "CouchDB"
- 5) "Oracle"
- 6) "MongoDB"
- 7) "MS SQL"
- 8) "MySQL"
另一方面,如果 count
参数的值为负数,那么 SRANDMEMBER
命令将随机地返回 abs(count)
个元素(abs(count)
也即是 count
的绝对值),并且在这些元素当中允许出现重复的元素:
- redis> SRANDMEMBER databases -3 -- 随机地返回三个可能会重复的元素
- 1) "Neo4j"
- 2) "CouchDB"
- 3) "MongoDB"
- redis> SRANDMEMBER databases -5 -- 随机地返回五个可能会重复的元素
- 1) "Neo4j"
- 2) "MySQL" -- 出现了两个 "MySQL" 元素
- 3) "MySQL"
- 4) "CouchDB"
- 5) "Oracle"
因为 count
参数为负数的 SRANDMEMBER
命令允许返回重复元素,所以即使 abs(count)
的值大于集合包含的元素数量,SRANDMEMBER
命令也会按照要求返回 abs(count)
个元素:
- redis> SRANDMEMBER databases -10 -- 随机地返回十个可能会相同的元素
- 1) "Redis"
- 2) "MySQL"
- 3) "CouchDB"
- 4) "PostgreSQL"
- 5) "Neo4j"
- 6) "MS SQL"
- 7) "MS SQL"
- 8) "MySQL"
- 9) "Neo4j"
- 10) "Redis"
其他信息
属性 | 值 |
---|---|
复杂度 | O(N),其中 N 为被返回的元素数量。 |
版本要求 | 不带 count 参数的 SRANDMEMBER 命令从 Redis 1.0.0 版本开始可用;带有 count 参数的 SRANDMEMBER 命令从 Redis 2.6.0 版本开始可用。 |