需要注意的一点是,被 SRANDMEMBER 命令返回的元素仍然会存在于集合当中,它们不会被移除。

    举个例子,对于包含以下元素的 databases 集合来说:

    1. redis> SMEMBERS databases
    2. 1) "Neo4j"
    3. 2) "Redis"
    4. 3) "PostgreSQL"
    5. 4) "CouchDB"
    6. 5) "Oracle"
    7. 6) "MS SQL"
    8. 7) "MongoDB"
    9. 8) "MySQL"

    再次提醒,SRANDMEMBER 命令不会移除被返回的集合元素,这一点可以通过查看 databases 集合包含的元素来确认:

    1. redis> SMEMBERS databases -- 集合包含的元素和执行 SRANDMEMBER 之前完全一样
    2. 2) "Redis"
    3. 3) "PostgreSQL"
    4. 4) "CouchDB"
    5. 5) "Oracle"
    6. 6) "MS SQL"
    7. 7) "MongoDB"
    8. 8) "MySQL"

    通过可选的 count 参数,用户可以指定 命令返回的元素数量,其中 count 参数的值既可以是正数也可以是负数。

    count 参数的值大于集合包含的元素数量时,SRANDMEMBER 命令将返回集合包含的所有元素:

    1. redis> SRANDMEMBER databases 10
    2. 1) "Neo4j" -- 因为 databases 集合的元素数量少于 10
    3. 2) "Redis" -- 所以命令会返回集合包含的全部 8 个元素
    4. 3) "PostgreSQL"
    5. 4) "CouchDB"
    6. 6) "MongoDB"
    7. 7) "MS SQL"
    8. 8) "MySQL"

    另一方面,如果 count 参数的值为负数,那么 SRANDMEMBER 命令将随机地返回 abs(count) 个元素( 也即是 count 的绝对值),并且在这些元素当中允许出现重复的元素:

    1. redis> SRANDMEMBER databases -10 -- 随机地返回十个可能会相同的元素
    2. 1) "Redis"
    3. 2) "MySQL"
    4. 3) "CouchDB"
    5. 4) "PostgreSQL"
    6. 5) "Neo4j"
    7. 6) "MS SQL"
    8. 7) "MS SQL"
    9. 8) "MySQL"
    10. 10) "Redis"

    其他信息