【常用】redis-set

在java中,set集合(hashSet)无序且不允许重复

在redis中,同样如此,set集合中不允许出现重复元素

一个set集合中可存储42亿数据量

【场景】如果涉及到两个大数据集合的交集,并集,差集计算,都会用到redis的set

一、【常用命令】

  1. 赋值

  • 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 执行后


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

猜你喜欢

转载自blog.csdn.net/luo_yu_1106/article/details/80003537