需要注意的一点是,被 SRANDMEMBER
命令返回的元素仍然会存在于集合当中,它们不会被移除。
举个例子,对于包含以下元素的 databases
集合来说:
- redis> SMEMBERS databases
- 1) "Neo4j"
- 2) "Redis"
- 3) "PostgreSQL"
- 4) "CouchDB"
- 5) "Oracle"
- 6) "MS SQL"
- 7) "MongoDB"
- 8) "MySQL"
再次提醒,SRANDMEMBER
命令不会移除被返回的集合元素,这一点可以通过查看 databases
集合包含的元素来确认:
- redis> SMEMBERS databases -- 集合包含的元素和执行 SRANDMEMBER 之前完全一样
- 2) "Redis"
- 3) "PostgreSQL"
- 4) "CouchDB"
- 5) "Oracle"
- 6) "MS SQL"
- 7) "MongoDB"
- 8) "MySQL"
通过可选的 count
参数,用户可以指定 命令返回的元素数量,其中 count
参数的值既可以是正数也可以是负数。
当 count
参数的值大于集合包含的元素数量时,SRANDMEMBER
命令将返回集合包含的所有元素:
- redis> SRANDMEMBER databases 10
- 1) "Neo4j" -- 因为 databases 集合的元素数量少于 10 个
- 2) "Redis" -- 所以命令会返回集合包含的全部 8 个元素
- 3) "PostgreSQL"
- 4) "CouchDB"
- 6) "MongoDB"
- 7) "MS SQL"
- 8) "MySQL"
另一方面,如果 count
参数的值为负数,那么 SRANDMEMBER
命令将随机地返回 abs(count)
个元素( 也即是 count
的绝对值),并且在这些元素当中允许出现重复的元素:
- redis> SRANDMEMBER databases -10 -- 随机地返回十个可能会相同的元素
- 1) "Redis"
- 2) "MySQL"
- 3) "CouchDB"
- 4) "PostgreSQL"
- 5) "Neo4j"
- 6) "MS SQL"
- 7) "MS SQL"
- 8) "MySQL"
- 10) "Redis"