Set简介
set 类似于 Java 中的 HashSet
,是redis中的一种数据结构,它是一个无序并且唯一的键值集合,并且储存时不会按照插入的先后顺序进行.一个集合中最多可以储存2^32 -1个元素。当你需要存储一个列表数据,又不希望出现重复数据时,set 是一个很好的选择,并且 set 提供了判断某个成员是否在一个 set 集合内的重要接口,这个也是 list 所不能提供的。
set集合不仅支持集合内的增删改查,还支持多个集合的交集、并集和差集。
常用命令
1.往集合mySet中存入元素,元素如果以存在则忽略,如果集合mySet不存在则新建
命令:往集合mySet中添加元素。
sadd mySet 元素
2.从集合mySet中删除元素
命令:
srem mySet 元素
3.获取集合mySet中的所有元素
命令:
smembers mySet
4.获取集合mySet中的元素个数
命令:
scard mySet
5.判断元素是否存在于集合mySet中
命令:
sismember mySet 元素
6.从集合mySet中随机选出n个元素,并不从集合中删除
命令:
srandmember mySet n
7.从集合mySet中随机选出n个元素,并从集合中删除
命令:
spop mySet n
8.交集操作,取多个集合的交集
命令:
sinter set1 set2 set3
9.取交集并把结果存入新集合newSet中
命令:
sinterstore newSet set1 set2 set3
10.并集操作,取多个集合的并集
命令:
sunion set1 set2 set3
11.取并集并把结果存入新集合newSet中
命令:
sunionstore newSet set1 set2 set3
12.差集操作,取多个集合的差集
命令;
sdiff set1 set2
13.取差集并把结果存入新集合newSet中
命令:
sdiff newSet set1 set2
应用场景
set的应用场景主要取决于它的特性:无序,不可重复,支持交差并集的操作。
因此set类型适合用来数据去重和保证数据的唯一性,还可以用来统计多个集合的交集并集和差集。只要涉及到这些方面都可以使用set去处理。
例如:
1.点赞:set类型可以保证每个用户只点一次赞,例如key值为帖子id,value为用户id。
2.共同关注:每个用户的关注列表可以用一个set集合表示,取两个用户集合的并集即可查看到用户的共同关注。