• SRANDMEMBER key [count]
    • 返回值
    • 代码示例

    SRANDMEMBER key [count]

    可用版本: >= 1.0.0
    时间复杂度: 只提供 key 参数时为 O(1) 。如果提供了 count 参数,那么为 O(N) ,N 为返回数组的元素个数。

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

    从 Redis 2.6 版本开始, SRANDMEMBER 命令接受可选的 count 参数:

    • 如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。

    • 如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。

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

    返回值

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

    代码示例

    1. # 添加元素
    2.  
    3. redis> SADD fruit apple banana cherry
    4. (integer) 3
    5.  
    6. # 只给定 key 参数,返回一个随机元素
    7.  
    8. redis> SRANDMEMBER fruit
    9. "cherry"
    10.  
    11. redis> SRANDMEMBER fruit
    12. "apple"
    13.  
    14. # 给定 3 为 count 参数,返回 3 个随机元素
    15. # 每个随机元素都不相同
    16.  
    17. redis> SRANDMEMBER fruit 3
    18. 1) "apple"
    19. 2) "banana"
    20. 3) "cherry"
    21.  
    22. # 给定 -3 为 count 参数,返回 3 个随机元素
    23. # 元素可能会重复出现多次
    24.  
    25. redis> SRANDMEMBER fruit -3
    26. 1) "banana"
    27. 2) "cherry"
    28. 3) "apple"
    29.  
    30. redis> SRANDMEMBER fruit -3
    31. 1) "apple"
    32. 2) "apple"
    33. 3) "cherry"
    34.  
    35. # 如果 count 是整数,且大于等于集合基数,那么返回整个集合
    36.  
    37. redis> SRANDMEMBER fruit 10
    38. 1) "apple"
    39. 2) "banana"
    40. 3) "cherry"
    41.  
    42. # 如果 count 是负数,且 count 的绝对值大于集合的基数
    43. # 那么返回的数组的长度为 count 的绝对值
    44.  
    45. redis> SRANDMEMBER fruit -10
    46. 1) "banana"
    47. 2) "apple"
    48. 3) "banana"
    49. 4) "cherry"
    50. 5) "apple"
    51. 6) "apple"
    52. 7) "cherry"
    53. 8) "apple"
    54. 9) "apple"
    55. 10) "banana"
    56.  
    57. # SRANDMEMBER 并不会修改集合内容
    58.  
    59. redis> SMEMBERS fruit
    60. 1) "apple"
    61. 2) "cherry"
    62. 3) "banana"
    63.  
    64. # 集合为空时返回 nil 或者空数组
    65.  
    66. redis> SRANDMEMBER not-exists
    67. (nil)
    68.  
    69. redis> SRANDMEMBER not-eixsts 10
    70. (empty list or set)