集合就是把一些有关联的数据放到一起
有序:顺序很重要,变换一下顺序,就是不同的list1了
无序:顺序不重要,变换一下顺序,集合还是那个集合
和list类似,集合中的每个元素也都是string类型(可以使用json类型的数据格式)
SADD
功能:将一个或者多个元素添加到set中
返回值:本次成功添加的个数
时间复杂度:$O(1)$
SADD key number [member...]
127.0.0.1:6379> sadd key 1 2 3 4
(integer) 4
127.0.0.1:6379> sadd key2 1 1 2 3 4
(integer) 4
SMEMBERS
功能:获取一个set中的所有元素
返回值:set中的元素
时间复杂度:近似$O(1)$
SMEMBERS key
127.0.0.1:6379> smembers key
1) "1"
2) "2"
3) "3"
4) "4"
SISMEMBER
功能:查找集合中元素
返回值:不存在,返回0,存在,返回值
时间复杂度:$O(1)$
SISMEMBER key member
127.0.0.1:6379> sismember key 100
(integer) 0
127.0.0.1:6379> sismember key 1
(integer) 1
SPOP
功能:从set中删除并返回一个或者多个元素。注意,由于set内的元素是无序的,所以取出哪个元素实际上是未定义行为,既可以看做是随机的。
时间复杂度:$O(1)$
返回值:取出的元素。
SPOP key [count]
127.0.0.1:6379> sadd key 1 2 3 4
(integer) 4
127.0.0.1:6379> spop key
"2"
127.0.0.1:6379> spop key
"4"
127.0.0.1:6379> spop key
"3"
SRANGEMEMBER
功能:随机取出set中的元素
SRANGEMEMBER key [count...]
127.0.0.1:6379> SRANDMEMBER key
"1"
127.0.0.1:6379> SRANDMEMBER key
"1"
SMOVE
功能:将一个元素从source set取出并放入destination set中。
时间复杂度:$O(1)$
返回值:1表示移动成功,0表示失败
SMOVE source destination member
127.0.0.1:6379> sadd key2 1 2 3 4
(integer) 4
127.0.0.1:6379> sadd key1 5 6 7 8
(integer) 4
127.0.0.1:6379> smove key1 key2 1
(integer) 0
127.0.0.1:6379> smove key2 key1 1
(integer) 1
127.0.0.1:6379> SMEMBERS key1
1) "1"
2) "5"
3) "6"
4) "7"
5) "8"
127.0.0.1:6379> SMEMBERS key2
1) "2"
2) "3"
3) "4"
SREM
功能:将指定的元素从set中删除,一次可以删除一个或者多个member
时间复杂度:$O(1)$
返回值:本次操作删除的元素个数
SREM key member [member...]
127.0.0.1:6379> sadd key 1 2 3 4
(integer) 4
127.0.0.1:6379> srem key 1
(integer) 1
127.0.0.1:6379> srem key 2
(integer) 1
SINTER
功能:对两个set取交集。
时间复杂度:$O(M * N)$,N是最小的集合元素个数,M是最大的集合元素个数。
返回值:最终交集的数据。
SINTER key [key...]
127.0.0.1:6379> sadd key2 3 4 5 6
(integer) 4
127.0.0.1:6379> sadd key 1 2 3 4
(integer) 4
127.0.0.1:6379> sinter key key2
1) "3"
2) "4"
SINTERSTORE
功能:获取给定set的交集中的元素并保存到目标set中。
时间复杂度:$O(N * M)$,N是最小的集合元素个数,M是最大的集合元素个数。
返回值:交集的元素个数
SINTERSTORE destination key [key...]
127.0.0.1:6379> SINTERSTORE key3 key key2
(integer) 2
127.0.0.1:6379> smembers key3
1) "3"
2) "4"
SUNION
功能:获取给定set的并集中的元素。
时间复杂度:$O(N)$,N
给定所有集合的总的元素个数。
返回值:并集的元素。
SUNION key [key...]
127.0.0.1:6379> sunion key key2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
SUNIONSTORE
功能:获取给定set的并集中的元素并保存到目标set中。
时间复杂度:$O(N * M)$,N是最小的集合元素个数,M是最大的集合元素个数。
返回值:并集的元素个数。
SUNIONSTORE destination key [key...]
127.0.0.1:6379> sunion key key2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
SDIFF
功能:获取给定set的差集中的元素。
时间复杂度:$O(N)$,N
给定所有集合的总的元素个数。
返回值:差集的元素。
SDIFF key [key...]
127.0.0.1:6379> sdiff key key2
1) "1"
2) "2"
SDIFFSTORE
功能:获取给定set的差集中的元素并保存到目标set中。
时间复杂度:$O(N * M)$,N是最小的集合元素个数,M是最大的集合元素个数。
返回值:差集的元素个数。
SDIFFSTORE destination key [key...]
127.0.0.1:6379> SDIFFSTORE key5 key key2
(integer) 2
127.0.0.1:6379> smembers key5
1) "1"
2) "2"
命令 | 时间复杂度 |
---|---|
sadd key element [element...] | O(k),k元素个数 |
srem key element [element...] | O(k),k元素个数 |
scard key | O(1) |
sismember key element | O(1) |
srandmember key [count] | O(n),n是count个数 |
spop key [count] | O(n),n是count个数 |
sismembers key | O(k),k是元素个数 |
sinter key [key...] sitnerstore | O(m * k),k是几个集合中元素最小的个数,m是几个集合中最大的个数 |
sunion key [key...] sunionstore | O(k),k是多个集合的元素个数总和 |
sdiff key [key...] sdiffstore | O(k),k是多个集合的元素个数总和 |
127.0.0.1:6379> sadd key 1 2 3 4
(integer) 4
127.0.0.1:6379> object encoding key
"intset"
127.0.0.1:6379> sadd key helloe
(integer) 1
127.0.0.1:6379> object encoding key
"hashtable"