在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:6379> sadd country china japan singapore (integer) 3 127.0.0.1:6379> smembers country 1) "china" 2) "singapore" 3) "japan"
2、SREM key value1 [value2 ...]
移除指定的成员
127.0.0.1:6379> smembers country 1) "china" 2) "singapore" 3) "japan" 127.0.0.1:6379> srem country japan (integer) 1 127.0.0.1:6379> smembers country 1) "china" 2) "singapore"
3、SISMEMBER key value
成员是否存在
127.0.0.1:6379> smembers country 1) "china" 2) "singapore" 127.0.0.1:6379> sismember country china (integer) 1
4、SCARD key
获取Set中成员的数量
127.0.0.1:6379> smembers country 1) "china" 2) "singapore" 127.0.0.1:6379> scard country (integer) 2
5、SMEMBERS key
列出所有成员
sadd country china japan singapore (integer) 3 127.0.0.1:6379> smembers country 1) "china" 2) "singapore" 3) "japan"
6、SPOP key
随机的移除Set中的一个成员并返回它
127.0.0.1:6379> smembers country 1) "Singapore" 2) "Japan" 3) "Bakistan" 4) "America" 5) "China" 6) "France" 127.0.0.1:6379> spop country "Japan" 127.0.0.1:6379> spop country "Bakistan"
7、SRANDMEMBER key
随机的返回Set中的一个成员,不同的是该命令并不会删除返回的成员
127.0.0.1:6379> smembers country 1) "America" 2) "China" 3) "Singapore" 4) "France" 127.0.0.1:6379> srandmember country "America" 127.0.0.1:6379> srandmember country "France" 127.0.0.1:6379> smembers country 1) "America" 2) "China" 3) "Singapore" 4) "France"
8、SMOVE source destination member
原子性的将参数中的成员从source键移入到destination键所关联的Set中。如果该成员在 source 中不存在,那么操作将被忽略。如果该成员已在 destination 中存在,那么该操作仅仅将 member 从 source 中移除。
127.0.0.1:6379> smembers country 1) "America" 2) "China" 3) "Singapore" 4) "France" 127.0.0.1:6379> smembers developedCty 1) "Japan" 127.0.0.1:6379> smove country developedCty America (integer) 1 127.0.0.1:6379> smembers developedCty 1) "America" 2) "Japan" 127.0.0.1:6379> smembers country 1) "China" 2) "Singapore" 3) "France"
------------------ 集合操作 ------------------
9、SDIFF key1 [key2 ...]
返回 key1 - key2 的差集
127.0.0.1:6379> sadd AsiaCountry China Japan Korea Thailand Singapore Vietnam (integer) 6 127.0.0.1:6379> sadd DevelopedCty America Japan Korea Singapore France German (integer) 6 127.0.0.1:6379> sdiff AsiaCountry DevelopedCty //找到亚洲中的非发达国家 1) "China" 2) "Vietnam" 3) "Thailand" 127.0.0.1:6379> sdiff DevelopedCty AsiaCountry //找到发达国家中国的非亚洲国家 1) "America" 2) "German" 3) "France"
10、SINTER key1 key2
返回交集
127.0.0.1:6379> sinter AsiaCountry DevelopedCty //找出既是发达国家,又是亚洲国家的 1) "Japan" 2) "Korea" 3) "Singapore"
11、SUNION key1 [key2 ...]
返回并集
127.0.0.1:6379> smembers AsiaCountry 1) "Vietnam" 2) "Japan" 3) "China" 4) "Korea" 5) "Thailand" 6) "Singapore" 127.0.0.1:6379> smembers DevelopedCty 1) "German" 2) "Japan" 3) "America" 4) "Korea" 5) "Singapore" 6) "France" 127.0.0.1:6379> sunion AsiaCountry DevelopedCty 1) "Japan" 2) "America" 3) "China" 4) "Korea" 5) "Singapore" 6) "Thailand" 7) "Vietnam" 8) "German" 9) "France"
12、SUNIONSTORE key1 key2 [key3 ...]
返回key2,key3等的并集并存储在key1中
127.0.0.1:6379> smembers AsiaCountry 1) "Japan" 2) "China" 3) "Korea" 4) "Singapore" 127.0.0.1:6379> smembers DevelopedCty 1) "German" 2) "Japan" 3) "America" 4) "Korea" 5) "Singapore" 6) "France" 127.0.0.1:6379> sunionstore totalCty AsiaCountry DevelopedCty (integer) 7 127.0.0.1:6379> smembers totalCty 1) "German" 2) "Japan" 3) "America" 4) "China" 5) "France" 6) "Korea" 7) "Singapore"