在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。需要说明的是,这些操作的时间复杂度为O(1),即常量时间内完成次操作。Set可包含的最大元素数量是4294967295。
      和List类型不同的是,Set集合中不允许出现重复的元素,这一点和C++标准库中的set容器是完全相同的。换句话说,如果多次添加相同元素,Set中将仅保留该元素的一份拷贝。和List类型相比,Set类型在功能上还存在着一个非常重要的特性,即在服务器端完成多个Sets之间的聚合计算操作,如unions、intersections和differences。由于这些操作均在服务端完成,因此效率极高,而且也节省了大量的网络IO开销。

1、SADD key value1 value2 value3

增加值。如果该值已存在,那么将会忽略,其他值正常插入。

127.0.0.1:> sadd country china japan singapore
(integer)
127.0.0.1:> smembers country
) "china"
) "singapore"
) "japan"

2、SREM key value1 [value2 ...]

移除指定的成员

127.0.0.1:> smembers country
) "china"
) "singapore"
) "japan"
127.0.0.1:> srem country japan
(integer)
127.0.0.1:> smembers country
) "china"
) "singapore"

3、SISMEMBER key value

成员是否存在

127.0.0.1:> smembers country
) "china"
) "singapore"
127.0.0.1:> sismember country china
(integer)

4、SCARD key

获取Set中成员的数量

127.0.0.1:> smembers country
) "china"
) "singapore"
127.0.0.1:> scard country
(integer)

5、SMEMBERS key

列出所有成员

sadd country china japan singapore
(integer)
127.0.0.1:> smembers country
) "china"
) "singapore"
) "japan"

6、SPOP key

随机的移除Set中的一个成员并返回它

127.0.0.1:> smembers country
) "Singapore"
) "Japan"
) "Bakistan"
) "America"
) "China"
) "France"
127.0.0.1:> spop country
"Japan"
127.0.0.1:> spop country
"Bakistan"

7、SRANDMEMBER key

随机的返回Set中的一个成员,不同的是该命令并不会删除返回的成员

127.0.0.1:> smembers country
) "America"
) "China"
) "Singapore"
) "France"
127.0.0.1:> srandmember country
"America"
127.0.0.1:> srandmember country
"France"
127.0.0.1:> smembers country
) "America"
) "China"
) "Singapore"
) "France"

8、SMOVE source destination member

原子性的将参数中的成员从source键移入到destination键所关联的Set中。如果该成员在 source 中不存在,那么操作将被忽略。如果该成员已在 destination 中存在,那么该操作仅仅将 member 从 source 中移除。

127.0.0.1:> smembers country
) "America"
) "China"
) "Singapore"
) "France"
127.0.0.1:> smembers developedCty
) "Japan"
127.0.0.1:> smove country developedCty America
(integer)
127.0.0.1:> smembers developedCty
) "America"
) "Japan"
127.0.0.1:> smembers country
) "China"
) "Singapore"
) "France"

------------------ 集合操作 ------------------

9、SDIFF key1 [key2 ...]

返回 key1 - key2 的差集

127.0.0.1:> sadd AsiaCountry China Japan Korea Thailand Singapore Vietnam
(integer)
127.0.0.1:> sadd DevelopedCty America Japan Korea Singapore France German
(integer)
127.0.0.1:> sdiff AsiaCountry DevelopedCty //找到亚洲中的非发达国家
) "China"
) "Vietnam"
) "Thailand"
127.0.0.1:> sdiff DevelopedCty AsiaCountry //找到发达国家中国的非亚洲国家
) "America"
) "German"
) "France"

10、SINTER key1 key2

返回交集

127.0.0.1:> sinter AsiaCountry DevelopedCty  //找出既是发达国家,又是亚洲国家的
) "Japan"
) "Korea"
) "Singapore"

11、SUNION key1 [key2 ...]

返回并集

127.0.0.1:> smembers AsiaCountry
) "Vietnam"
) "Japan"
) "China"
) "Korea"
) "Thailand"
) "Singapore"
127.0.0.1:> smembers DevelopedCty
) "German"
) "Japan"
) "America"
) "Korea"
) "Singapore"
) "France"
127.0.0.1:> sunion AsiaCountry DevelopedCty
) "Japan"
) "America"
) "China"
) "Korea"
) "Singapore"
) "Thailand"
) "Vietnam"
) "German"
) "France"

12、SUNIONSTORE key1 key2 [key3 ...]

返回key2,key3等的并集并存储在key1中

127.0.0.1:> smembers AsiaCountry
) "Japan"
) "China"
) "Korea"
) "Singapore"
127.0.0.1:> smembers DevelopedCty
) "German"
) "Japan"
) "America"
) "Korea"
) "Singapore"
) "France"
127.0.0.1:> sunionstore totalCty AsiaCountry DevelopedCty
(integer)
127.0.0.1:> smembers totalCty
) "German"
) "Japan"
) "America"
) "China"
) "France"
) "Korea"
) "Singapore"
05-11 19:39