在java中,set集合(hashSet)无序且不允许重复
在redis中,同样如此,set集合中不允许出现重复元素
一个set集合中可存储42亿数据量
【场景】如果涉及到两个大数据集合的交集,并集,差集计算,都会用到redis的set
一、【常用命令】
- 赋值
- sadd key values[value1、value2、value3....] 向set中添加数据,如果该key对应的set中已经有了这个元素,则不会重复添加
例如:想要创建如下集合(向set1中添加 a b c d四个元素)
key value
set1 [a b c d]
sadd set1 a b c d a 执行后
![](/qrcode.jpg)
a不会被添加进去
2.删值
srem key members[member1、member2、member3] 删除key对应的set中指定元素
例如:想要删除set1中的b d
srem set1 b d
3.取值
- smembers key 获取set中的所有成员
例如:获取set1中所有的元素
smembers set1
- sismembers key member 判断参数中指定的成员是否在该set中,1表示存在,0表示不存在或该key本身就不存在
这个命令经常使用
比如我们判断set1中是否有a元素
sismember set1 a
比如看视频前判断此人是否是会员
普通用户[张三,李四,王五]
vip用户 [兰兰、明明]
是的话返回1,不是返回0
二、集合运算
1.差集运算
- sdiff key1 key2... 返回key1与key2中相差的成员,而且与key的顺序有关。即返回差集
当key1在前 则返回的是在key1而不在key2的元素集合
当key2在前 则返回在key2而不在key1的元素集合
例如 有集合
key value
set1 a b c d
set2 a b
那么执行 sdiff set1 set2 则会返回 c d
2.交集运算
- sinter key1 key2 key3..... 返回属于A 又属于B的部分,即交集。此命令无顺序区别
例如 找出set1与set2的交集
sinter set1 set2
则结果为 a b
3.并集运算
sunion key1 key2 key3..... 返回并集
得到set1和set2的并集
sunion set1 set2
结果为
a b c d
【tips】集合的数据量越大,使用redis的优势越大
三、扩展命令
1.scard key: 获取set中成员的数量
例如 scard set1 返回就是 4
例如,我今天想看看网站会员有多少
2.srandmember key: 随机返回set中的一个成员
例如 srandmember set1
3.sdiffstore destination key1 key2 ..... :将key1 key2相差的成员存储在destination上(在key1而不在key2)
例如 sdiffstore set3 set1 set2 那么set3里的元素就是 c d
4.sinterstore destination key1 key2 ..... :将key1 key2返回的交集存储在destination上
5.sunionstore destination key1 key2 ..... : 将key1 key2的并集存储在destination上
例如 sunion set4 set1 set2
那么set4结果就是 a b c d