SADD
SADD key member [member …]
可用版本: >= 1.0.0
时间复杂度: O(N), N 是被添加的元素的数量。
将一个或多个member
元素加入到集合key
当中,已经存在于集合的member
元素将被忽略(集合中的元素各不相同)。
演示
当key
不存在时,会先创建一个空集合,再执行SADD命令将这些member
元素加入到空集合中去。SADD命令返回被添加到集合中的新元素的数量,不包括被忽略的元素。
127.0.0.1:6379> exists set
(integer) 0
127.0.0.1:6379> sadd set 1 2 3 4
(integer) 4
127.0.0.1:6379> smembers set
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> sadd set 3 5 2 1 1 6 7 8 9 0
(integer) 6
127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
7) "6"
8) "7"
9) "8"
10) "9"
当key
不是集合类型时,返回一个错误。
127.0.0.1:6379> lpush list 1 2 3
(integer) 3
127.0.0.1:6379> sadd list 1
(error) WRONGTYPE Operation against a key holding the wrong kind of value
SISMEMBER
SISMEMBER key member
可用版本: >= 1.0.0
时间复杂度: O(1)
判断member
元素是否是集合key
中的成员。
演示
如果member
元素是集合中的成员,SISMEMBER命令返回1
。
127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
7) "6"
8) "7"
9) "8"
10) "9"
127.0.0.1:6379> sismember set 9
(integer) 1
如果member
元素不是集合中的成员,或者key
不存在,命令则返回0
。
127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
7) "6"
8) "7"
9) "8"
10) "9"
127.0.0.1:6379> sismember set 10
(integer) 0
127.0.0.1:6379> exists set2
(integer) 0
127.0.0.1:6379> sismember set2 0
(integer) 0
SPOP
SPOP key [count]
可用版本: >= 1.0.0
时间复杂度: 只提供 key 参数时为 O(1) 。如果提供了 count 参数,那么为 O(N) ,N 为返回数组的元素个数。
移除并返回集合中的一个或多个随机元素,如果你的Redis版本中SPOP命令没有这个可选的count
参数,就只能移除并返回集合中的一个随机元素。
演示
当key
不存在或key
是空集合时,SPOP命令返回(nil)
。并且当count
大于集合成员数量时,会移除并返回集合全部成员。
127.0.0.1:6379> exists set2
(integer) 0
127.0.0.1:6379> spop set2
(nil)
127.0.0.1:6379> sadd set2 1
(integer) 1
127.0.0.1:6379> spop set2 10
1) "1"
127.0.0.1:6379> spop set2
(nil)
其他情况,SPOP命令返回被移除的所有随机元素。
127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
7) "6"
8) "7"
9) "8"
10) "9"
127.0.0.1:6379> spop set 4
1) "2"
2) "0"
3) "3"
4) "6"
127.0.0.1:6379> smembers set
1) "1"
2) "4"
3) "5"
4) "7"
5) "8"
6) "9"
127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
127.0.0.1:6379> spop set -20
(error) ERR index out of range
127.0.0.1:6379> spop set 0
(empty list or set)
SRANDMEMBER
SRANDMEMBER key [count]
可用版本: >= 1.0.0
时间复杂度: 只提供 key 参数时为 O(1) 。如果提供了 count 参数,那么为 O(N) ,N 为返回数组的元素个数。
如果命令只提供了key
参数,那么返回集合中的一个随机元素。
该命令和SPOP命令相似,但SPOP命令是将随机元素从集合中移除并返回,而SRANDMEMBER命令则仅仅返回随机元素,而不对集合进行任何改动。并且在两个命令的演示过程中,也可以发现count
参数的效果也有点不一样(正负值)。
演示
只提供key
参数时,将返回一个元素;如果集合为空,则返回(nil)
。
127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
127.0.0.1:6379> srandmember set
"2"
127.0.0.1:6379> del set
(integer) 1
127.0.0.1:6379> srandmember set
(nil)
如果提供了count
参数,那么会返回一个数组;如果集合为空,会返回空数组。
当count
为正数时,且小于集合基数,那么命令返回一个包含count
个元素的数组,并且数组中的元素各不相同。如果count
大于等于集合基数,那么会将整个集合做为一个数组进行返回。
127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
127.0.0.1:6379> srandmember set 1
1) "3"
127.0.0.1:6379> srandmember set 0
(empty list or set)
127.0.0.1:6379> srandmember set 20
1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
127.0.0.1:6379> del set
(integer) 1
127.0.0.1:6379> srandmember set 5
(empty list or set)
当count
为负数时,命令返回的数组中,元素可能会重复出现多次,而数组的长度为 count
的绝对值。
127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
127.0.0.1:6379> srandmember set -2
1) "5"
2) "5"
127.0.0.1:6379> srandmember set -10
1) "3"
2) "0"
3) "9"
4) "1"
5) "0"
6) "3"
7) "7"
8) "6"
9) "2"
10) "3"
127.0.0.1:6379> srandmember set -20
1) "1"
2) "9"
3) "2"
4) "3"
5) "3"
6) "8"
7) "6"
8) "6"
9) "7"
10) "1"
11) "9"
12) "7"
13) "2"
14) "5"
15) "5"
16) "1"
17) "3"
18) "9"
19) "2"
20) "6"
127.0.0.1:6379> del set
(integer) 1
127.0.0.1:6379> srandmember set -7
(empty list or set)
SREM
SREM key member [member …]
可用版本: >= 1.0.0
时间复杂度: O(N), N 为给定 member 元素的数量。
移除集合key
中的一个或多个member
元素,不存在的member
元素会被忽略。
演示
SREM命令返回被成功移除的元素的数量,不包括被忽略的元素。
127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
127.0.0.1:6379> srem set 9 0 10 11 2 4 4 9 0
(integer) 3
127.0.0.1:6379> smembers set
1) "1"
2) "3"
3) "5"
4) "6"
5) "7"
6) "8"
127.0.0.1:6379> del set
(integer) 1
127.0.0.1:6379> srem set 0 1 2 3 4
(integer) 0
当key
不是集合类型,命令返回一个错误。
127.0.0.1:6379> lrange list 0 -1
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> srem list 1
(error) WRONGTYPE Operation against a key holding the wrong kind of value
SMOVE
SMOVE source destination member
可用版本: >= 1.0.0
时间复杂度: O(1)
将member
元素从source
集合移动到destination
集合,并且这是一个原子命令。
演示
如果source
集合不存在或不包含指定的member
元素,则SMOVE命令不执行任何操作,仅返回0
。
127.0.0.1:6379> del set
(integer) 1
127.0.0.1:6379> sadd set 3 5 2 1 1 6 7 8 9 0
(integer) 9
127.0.0.1:6379> del set1
(integer) 0
127.0.0.1:6379> exists set1
(integer) 0
127.0.0.1:6379> smove set1 set 0
(integer) 0
127.0.0.1:6379> sadd set1 0
(integer) 1
127.0.0.1:6379> smove set1 set 1
(integer) 0
127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
否则, member
元素从source
集合中被移除,并添加到destination
集合中去。
127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
127.0.0.1:6379> smembers set1
1) "0"
2) "10"
127.0.0.1:6379> smove set1 set 10
(integer) 1
127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
10) "10"
127.0.0.1:6379> smembers set1
1) "0"
而当destination
集合已经包含member
元素时, SMOVE命令只是简单地将source
集合中的member
元素删除。
127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
10) "10"
127.0.0.1:6379> smembers set1
1) "0"
127.0.0.1:6379> smove set1 set 0
(integer) 1
127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
10) "10"
127.0.0.1:6379> smembers set1
(empty list or set)
当source
或destination
不是集合类型时,命令返回一个错误。
SCARD
SCARD key
可用版本: >= 1.0.0
时间复杂度: O(1)
返回集合key
的基数(集合中元素的数量)。
演示
当key
不存在或是空集合时,命令返回0
。
127.0.0.1:6379> del set1
(integer) 0
127.0.0.1:6379> scard set1
(integer) 0
127.0.0.1:6379> sadd set1 1
(integer) 1
127.0.0.1:6379> spop set1
"1"
127.0.0.1:6379> scard set1
(integer) 0
否则,返回集合的基数。
127.0.0.1:6379> scard set
(integer) 10
127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
10) "10"
当key
不是集合类型时,命令返回一个错误。
127.0.0.1:6379> scard list
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> lrange list 0 -1
1) "3"
2) "2"
3) "1"
SMEMBERS
SMEMBERS key
可用版本: >= 1.0.0
时间复杂度: O(N), N 为集合的基数。
返回集合key
中的所有成员。
演示
不存在的key
被视为空集合。
127.0.0.1:6379> exists set1
(integer) 0
127.0.0.1:6379> smembers set1
(empty list or set)
127.0.0.1:6379> sadd set1 90
(integer) 1
127.0.0.1:6379> spop set1
"90"
127.0.0.1:6379> smembers set1
(empty list or set)
当key
是有成员的集合时,命令返回集合中的所有成员。
127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
10) "10"
127.0.0.1:6379> scard set
(integer) 10
当key
不是集合类型时,命令返回一个错误。
127.0.0.1:6379> smembers list
(error) WRONGTYPE Operation against a key holding the wrong kind of value
SSCAN
SSCAN key cursor [MATCH pattern] [COUNT count]
可用版本: >= 2.8.0
时间复杂度:增量式迭代命令每次执行的复杂度为 O(1) , 对数据集进行一次完整迭代的复杂度为 O(N) , 其中 N 为数据集中的元素数量。
SSCAN命令用于增量式迭代集合中的成员。
选项
- MATCH :MATCH选项为增量式迭代命令提供一个集合中成员的模式参数, 让命令只返回和给定模式参数相匹配的成员, 这一点可以通过在执行增量式迭代命令时, 通过给定
MATCH <pattern>
参数来实现,在下面会进行演示。 - COUNT:COUNT选项的作用就是让用户告知迭代命令, 在每次迭代中应该从数据集里返回多少元素。但COUNT选项只是对增量式迭代命令的一种提示(并不一定会遵守)。COUNT参数的默认值为10 。用户可以在每次迭代中按自己的需要随意改变COUNT参数的值, 只要记得将上次迭代返回的游标用到下次迭代里面就可以了。
演示
SSCAN命令是一个基于游标的迭代器,SSCAN命令每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为SSCAN命令的游标参数, 以此来延续之前的迭代过程。
当SSCAN命令的游标参数被设置为0时, 服务器将开始一次新的迭代, 而当服务器向用户返回值为0的游标时, 表示迭代已结束。
127.0.0.1:6379> smembers set
1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
10) "10"
11) "11"
12) "12"
13) "13"
14) "14"
15) "15"
16) "16"
17) "17"
18) "18"
19) "19"
20) "20"
21) "21"
22) "22"
23) "23"
127.0.0.1:6379> sscan set 0
1) "0"
2) 1) "0"
2) "1"
3) "2"
4) "3"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
10) "10"
11) "11"
12) "12"
13) "13"
14) "14"
15) "15"
16) "16"
17) "17"
18) "18"
19) "19"
20) "20"
21) "21"
22) "22"
23) "23"
使用MATCH选项。
sscan set 0 match 2*
127.0.0.1:6379> sscan set 0 match 2*
1) "0"
2) 1) "2"
2) "20"
3) "21"
4) "22"
5) "23"
使用COUNT选项(其实是不起作用的)。
127.0.0.1:6379> sscan set 0 match 1* count 5
1) "0"
2) 1) "1"
2) "10"
3) "11"
4) "12"
5) "13"
6) "14"
7) "15"
8) "16"
9) "17"
10) "18"
11) "19"
和之前介绍过的HSCAN命令是类似的:Redis - 哈希表HLEN、HSTRLEN、HINCRBY、HINCRBYFLOAT、HSCAN命令介绍。
所以这也说明了,COUNT选项只是对增量式迭代命令的一种提示(并不一定会遵守)。
Redis中集合的SADD、SISMEMBER、SPOP、SRANDMEMBER、SREM、SMOVE、SCARD、SMEMBERS、SSCAN命令就介绍到这里。
写博客是博主记录自己的学习过程,如果有错误,请指正,谢谢!