非常教程

Redis参考手册

设定 | Sets

srandmember

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 中实现,对哈希表桶进行采样以找到非空的桶。一旦找到一个非空的桶,因为我们在我们的哈希表实现中使用链接,所以会检查桶内的元素数量并选择一个随机元素。

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

Redis

Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。 它通常被称为数据结构服务器,因为值( value )可以是 字符串( String ), 哈希(Map),列表(list),集合( sets ) 和 有序集合( sorted sets )等类型。

主页 https://redis.io/
源码 https://github.com/antirez/redis
发布版本 4.0.2

Redis目录

1.集合 | Cluster
2.连接 | Connection
3.Geo
4.Hashes
5.HyperLogLog
6.键 | Keys
7.列表 | Lists
8.Pub/Sub
9.脚本 | Scripting
10.服务器 | Server
11.设定 | Sets
12.排序集 | Sorted Sets
13.字符串 | Strings
14.事务 | Transactions
15.Redis Dump 命令
16.Redis DEL 命令
17.Redis 键(key)
18.Redis 命令
19.Redis 配置
20.Redis 简介
21.Redis RANDOMKEY 命令
22.Redis TTL 命令
23.Redis Pttl 命令
24.Redis PERSIST 命令
25.Redis Move 命令
26.Redis PEXPIREAT 命令
27.Redis Keys 命令
28.Redis Expireat 命令
29.Redis Expire 命令
30.Redis EXISTS 命令
31.Redis Mget 命令
32.Redis Getbit 命令
33.Redis Getset 命令
34.Redis Getrange 命令
35.Redis Get 命令
36.Redis SET 命令
37.Redis 字符串(String)
38.Redis Type 命令
39.Redis Renamenx 命令
40.Redis Rename 命令
41.Redis Incrby 命令
42.Redis Incr 命令
43.Redis Psetex 命令
44.Redis Msetnx 命令
45.Redis Mset 命令
46.Redis Strlen 命令
47.Redis Setrange 命令
48.Redis Setnx 命令
49.Redis Setex 命令
50.Redis Setbit 命令
51.Redis Hincrby 命令
52.Redis Hgetall 命令
53.Redis Hget 命令
54.Redis Hexists 命令
55.Redis Hdel 命令
56.Redis 哈希(Hash)
57.Redis Append 命令
58.Redis Decrby 命令
59.Redis Decr 命令
60.Redis Incrbyfloat 命令
61.Redis Blpop 命令
62.Redis 列表(List)
63.Redis Hvals 命令
64.Redis Hsetnx 命令
65.Redis Hset 命令
66.Redis Hmset 命令
67.Redis Hmget 命令
68.Redis Hlen 命令
69.Redis Hkeys 命令
70.Redis Hincrbyfloat 命令
71.Redis Lrem 命令
72.Redis Lrange 命令
73.Redis Lpushx 命令
74.Redis Lpush 命令
75.Redis Lpop 命令
76.Redis Llen 命令
77.Redis Linsert 命令
78.Redis Lindex 命令
79.Redis Brpoplpush 命令
80.Redis Brpop 命令
81.Redis Sdiff 命令
82.Redis Scard 命令
83.Redis Sadd 命令
84.Redis 集合(Set)
85.Redis Rpushx 命令
86.Redis Rpush 命令
87.Redis Rpoplpush 命令
88.Redis Rpop 命令
89.Redis Ltrim 命令
90.Redis Lset 命令
91.Redis Sunion 命令
92.Redis Srem 命令
93.Redis Srandmember 命令
94.Redis Spop 命令
95.Redis Smove 命令
96.Redis Smembers 命令
97.Redis Sismember 命令
98.Redis Sinterstore 命令
99.Redis Sinter 命令
100.Redis Sdiffstore 命令