与list区别

        redis中,set可看作为没有排序的字符集合,和list类型一样,是一个列表的功能,可以在该类型数值上执行添加、删除或判断某一元素是否存在等操作。但是与list不同的是:1、不会出现重复的数据,2、提供了可判断某个成员是否在一个set集合内的接口。3、在服务器端完成多个sets之间的聚合计算操作,如:unions、intersections。所以效率很快。

应用

        1、在微博应用中,将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。由于redis还为集合提供了求交集、并集、叉集等操作,所以非常方便的实现如共同关注、共同喜欢、二度好友等功能;在购物方面应用:所有购买某一电子设备的客户ID被存储在一个指定的Set中,而购买另外一种电子产品的客户ID被存储在另外一个Set中,若想获取有哪些客户同时购买了这两种商品时,Set的叉集命令就可以充分发挥它的方便和效率的优势了。

        2、跟踪一些唯一性数据,如访问某一博客的唯一IP地址信息。对于此场景,仅需在每次访问该博客时将访问者的IP存入Redis中,Set数据类型会自动保证IP地址的唯一性。

具体实现

        set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,也是set能提供判断一个成员是否在集合内的原因。