我们可以将Set类型看作为没有排序的字符集合,Set集合中不允许出现重复的元素,和List类型一样,我们也可以在该类型的数据值上执行添加、删除或判断某一元素是否存在等操作。需要说明的是,这些操作的时间是常量时间。

Set可包含的最大元素数是4294967295。

Set类型在功能上还存在着一个非常重要的特性,即在服务器端完成多个Sets之间的聚合计算操作,如unions、intersections和differences。由于这些操作均在服务端完成,因此效率极高,而且也节省了大量的网络IO开销。

redis set命令的执行过程 Redis中对Set类型的操作命令(1)

添加数据:sadd key value1、value2…:向set中添加数据,如果该key的值已有则不会重复添加

查找元素:smembers key

redis set命令的执行过程 Redis中对Set类型的操作命令(2)

我们可以看到查询出来的数据并没有顺序,也就是说查找数据和添加数据不一致

删除元素:srem key member1、member2…:删除set中指定的成员

redis set命令的执行过程 Redis中对Set类型的操作命令(3)

sismember key member:判断参数中指定的成员member是否在该set中,1表示存在,0表示不存在或者该key本身就不存在

redis set命令的执行过程 Redis中对Set类型的操作命令(4)

集合的运算操作

差集:sdiff key1 key2:返回key1与key2中相差的成员,而且与key的顺序有关。即返回差集,就是key1中有的而key2中没有的。

redis set命令的执行过程 Redis中对Set类型的操作命令(5)

交集:sinter key1 key2:返回key1和key2的交集

redis set命令的执行过程 Redis中对Set类型的操作命令(6)

redis set命令的执行过程 Redis中对Set类型的操作命令(7)

并集:sunion key1、key2:返回并集

redis set命令的执行过程 Redis中对Set类型的操作命令(8)

一些扩展的命令

scard key:获取set中成员的数量,就是key对应的set集合中元素的个数

redis set命令的执行过程 Redis中对Set类型的操作命令(9)

srandmember key:随机返回set中的一个成员

redis set命令的执行过程 Redis中对Set类型的操作命令(10)

sdiffstore destination key1 key2:将key1、key2相差的成员存储在destination上

其中destinaation作为键值为set,set中存储的是key1和key2中相差的成员,key1中有而key2中没有的成员

redis set命令的执行过程 Redis中对Set类型的操作命令(11)

sinterstore destination key1 key2:将返回的交集存储在destination上

sunionstore destination key1 key2:将返回的并集存储在destination上

redis set命令的执行过程 Redis中对Set类型的操作命令(12)

,