ディレクトリ 検索
Cluster cluster addslots(集群 槽位) cluster count failure reports(集群计数失败报告) cluster countkeysinslot cluster delslots cluster failover cluster forget cluster getkeysinslot cluster info cluster keyslot(集群键槽) cluster meet cluster nodes(集群节点) cluster replicate(集群复制) cluster reset(集群重置) cluster saveconfig cluster set config epoch cluster setslot cluster slaves cluster slots readonly readwrite Connection auth echo ping quit select swapdb Geo geoadd geodist geohash geopos georadius georadiusbymember Hashes hdel hexists hget hgetall hincrby hincrbyfloat hkeys hlen hmget hmset hscan hset hsetnx hstrlen hvals HyperLogLog pfadd pfcount pfmerge Keys del dump exists expire expireat keys migrate move object persist pexpire pexpireat pttl randomkey rename renamenx restore scan sort touch ttl type unlink wait Lists blpop brpop brpoplpush lindex linsert llen lpop lpush lpushx lrange lrem lset ltrim rpop rpoplpush rpush rpushx Pub/Sub psubscribe publish pubsub punsubscribe subscribe unsubscribe Scripting eval evalsha script debug script exists script flush script kill script load Server bgrewriteaof bgsave client getname client kill client list client pause client reply client setname command command count command getkeys command info config get config resetstat config rewrite config set dbsize debug object debug segfault flushall flushdb info lastsave monitor role save shutdown slaveof slowlog time Sets sadd scard sdiff sdiffstore sinter sinterstore sismember smembers smove spop srandmember srem sscan sunion sunionstore Sorted Sets zadd zcard zcount zincrby zinterstore zlexcount zrange zrangebylex zrangebyscore zrank zrem zremrangebylex zremrangebyrank zremrangebyscore zrevrange zrevrangebylex zrevrangebyscore zrevrank zscan zscore zunionstore Strings append bitcount bitfield bitop bitpos decr decrby get getbit getrange getset incr incrby incrbyfloat mget mset msetnx psetex set setbit setex setnx setrange strlen Transactions discard exec multi unwatch watch
テキスト

SRANDMEMBER key [count]

自1.0.0起可用。

时间复杂度:没有计数参数O(1),否则O(N)其中N是通过的计数的绝对值。

当仅用key参数调用时,从存储在的设置值返回一个随机元素key

从 Redis 版本2.6开始,当使用附加count参数调用时,如果为正值,则返回count 不同元素的数组count。如果调用负值,count则行为会发生更改,并且该命令可以多次返回相同的元素。在这种情况下,返回元素的数量是指定的绝对值count

当仅用关键参数调用时,操作与 SPOP 类似,但 SPOP 也会从集合中删除随机选择的元素,SRANDMEMBER 将只返回一个随机元素而不以任何方式更改原始集合。

返回值

散装串答复:没有附加count参数中的命令返回与所述随机选择的元件的散装回复,或nilkey不存在。数组回复:当count传递附加参数时,该命令返回一个元素数组,或者当一个空数组key不存在时。

例子

redis>  SADD myset one two three (integer) 3 

redis>  SRANDMEMBER myset "three" 

redis>  SRANDMEMBER myset 2 1) "two" 2) "three" 

redis>  SRANDMEMBER myset -5 1) "one" 2) "one" 3) "one" 4) "two" 5) "two"

计数通过时的行为规范

当一个 count 参数被传递并且是肯定的时候,这些元素被返回,就好像每个被选中的元素都被从集合中移除一样(比如提取宾果游戏中的数字)。但是元素不会从 Set 中删除。所以基本上:

  • 没有重复的元素被返回。

  • 如果 count 大于 Set 内部的元素数量,则该命令将只返回整个集合而不包含其他元素。

如果计数是负数,则行为会发生变化,并且提取会发生,就好像在每次提取后再次将提取的元素放入包中一样,因此可能会重复元素,并且总是会返回请求的元素数量,因为我们可以重复相同的元素元素一次又一次,除了一个空的 Set(不存在的键),它总是会产生一个空数组。

返回元素的分配

当集合中的元素数量很少时,返回元素的分布还远未完善,这是因为我们使用了一个近似的随机元素函数,并不能真正保证良好的分布。

使用的算法在 dict.c 中实现,对哈希表桶进行采样以找到非空的桶。一旦找到一个非空的桶,因为我们在我们的哈希表实现中使用链接,所以会检查桶内的元素数量并选择一个随机元素。

这意味着如果在整个散列表中有两个非空桶,并且一个有三个元素,而另一个只有一个,那么在桶中单独存在的元素将返回的概率要高得多。

前の記事: 次の記事: