第十八章:Redis的具体使用——set类型(集合)

更新于:2019-02-22 15:16:14

set类型,是什么类型?它是string类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。set元素最大可以包含(2的32次方-1)个元素。


set类型与list类型的对比:


list类型图形化理解为:



set类型图形化理解为:


1.png


①list类型按照添加顺序排序,set类型是无顺序的。

②list类型允许添加重复数据,set类型不允许有重复数据。


以上两点,大家只要想一想:list类型是双向链表实现的,set类型是哈希表实现的,这样就不难理解了。


set类型操作命令:


1.png


下面开始做演示:


有两个人:tom与linken,分别用两个set类型记录下两人的好友列表。tom好友set集合的key为tomfri,linken好友set集合的key为linkenfri。


①为集合添加数据元素


sadd tomfri mary jack xiaomi laowang
sadd linkenfri john lucy mary xiaomi


sadd 命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。

假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合。

当集合 key 不是集合类型时,返回一个错误。

注意:在Redis2.4版本以前, SADD 只接受单个成员值。


1.png


②查看集合数据元素


scard tomfri              //查看集合中元素的数量,不再是len了
smembers linkenfri        //返回集合中的所有的成员。 不存在的集合 key 被视为空集合。
sismember linkenfri lucy  //判断成员元素是否是集合的成员。如果成员元素是集合的成员,返回 1 。 如果成员元素不是集合的成员,或 key 不存在,返回 0 。


1.png


为linkenfri集合添加了Lucy,因为本来就存在,所以再次添加被忽略。


③移除集合数据元素


srem linkenfri lucy
smove tomfri linkenfri jack


srem 命令用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。

当 key 不是集合类型,返回一个错误。


smove 命令将指定成员 member 元素从 source 集合移动到 destination 集合。

smove 是原子性操作(Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行)。

如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。否则, member 元素从 source 集合中被移除,并添加到 destination 集合中去。

当 destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将 source 集合中的 member 元素删除。

当 source 或 destination 不是集合类型时,返回一个错误。


1.png


SPOP key_name 移除并返回集合中的一个随机元素


把集合看作一个班级,每个学生都有唯一的学号,spop命令类似于对全班同学的随机点名,每个同学只点一次。


④两组集合的关系


应该是我们初中学习数学时,有这样的知识,对两组及多组数字求出交集、并集和差集。一张图生动理解这三个概念:


1.png


Redis的set类型也有相关的一些命令可以求出多个集合之间的交集、并集与差集的关系。


1)交集


sinter tomfri linkenfri //返回给定所有给定集合的交集


1.png


sinterstore p1 tomfri linkenfri //把所有集合的交集存到新的集合中,p1是新的集合名称


1.png


2)并集


sunion tomfri linkenfri
sunionstore p2 tomfri linkenfri


1.png


3)差集


sdiff tomfri linkenfri
sdiff linkenfri tomfri


sdiff 命令返回给定集合之间的差集。不存在的集合 key 将视为空集。


注意的地方:差集的结果来自前面的 FIRST_KEY ,而不是后面的 OTHER_KEY1,也不是整个 FIRST_KEY OTHER_KEY1..OTHER_KEYN 的差集。


1.png


1.png


sdiffstore p3 tomfri linkenfri
sdiffstore p3 linkenfri tomfri


1.png


set类型的应用


1)社交网站,通过计算两个集合(好友列表)的交集,可做出共同好友、互相关注功能;通过计算两个集合的差集,可做出好友推荐功能。


2)利用set的唯一性,可统计访问网站的所有独立ip。