Redis入门【五】---------集合(Set)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Tacks/article/details/82493743

前言

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,而集合就类似数学中有三大特性,确定性,无序性,互异性,那么自然集合中不能有重复的数据,和上一节redis的list列表类型不同,list的顺序不一样,也表示不同的key。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

情景融入

类似qq好友推荐功能,你们的共同好友,注意集合中的各个元素不能重复,没有顺序。既然是集合,那么就有集合的运算,并交差集。

现在这里有两个人的朋友圈,tom和linken的圈子,他们都有各自的朋友,而且他们朋友之间也有一样的。看下面这个图。

那用数学符号表示一下

tomU={mary,jack,wang5,wang6,xiaoming};

linkenU={yuehan,daxiong,luce,wang5,wang6};

如何把他们进行添加到redis,并且进行运算操作?

命令操作

【1】集合元素的添加

#<1>向集合添加一个或多个成员 
sadd key member [member ...]

注意:

命令将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合。当集合 key 不是集合类型时,返回一个错误。

返回: 添加成功,返回刚才添加进去的元素的个数,(与集合中重复的元素,或者添加中有重复的元素,只算作一个)。

用这个命令添加到redis中,如图

【2】集合的运算(交,并,差)

#<2>返回给定所有集合的交集
sinter key [key ...]
#<3>返回所有给定集合的并集
sunion key [key ...]
#<4>返回给定所有集合的差集
sdiff key [key ...]

注意:不存在的集合 key 被视为空集

sinter  当给定集合当中有一个空集时,交集结果也为空集(根据集合运算定律)。

sunion当给定集合当中有一个空集时,并集结果就是除了空集其他的集合并集(根据集合运算定律)。

sdiff   前面的集合对后面的集合做差运算,那么差集的结果元素总是来自前面的集合元素(根据集合运算定律)。所以差集要注意顺序

如果想要将集合运算的结果保存在另一个集合destination中可以用下面的命令

 sinterstore/ sunionstore/sdiffstore  destination key [key ...]

返回:  

sinter   返回给定集合的交集  上面例子也就是,tomU ∩ linkenU 

sunion 返回给定集合的并集  上面例子也就是,tomU ∪ linkenU 

sdiff      返回给定集合的差集  上面例子也就是,tomU - linkenU   , linkenU - tomU 这两个结果是不一样的

【3】其他常用命令

#<5>获取集合的成员数
scard key
#<6>返回集合中的所有成员
smembers key
#<7>将 member 元素从 source 集合移动到 destination 集合
smove source destination member
#<8>移除集合中一个或多个成员
srem key member [member ...]
#<9>判断 member 元素是否是集合 key 的成员
sismember key member

【4】随机操作

#<10>返回集合中一个或多个随机数
srandmember key [count]
#<11>移除并返回集合中的一个随机元素
spop key [count]

打个总结

redis的set常用命令

猜你喜欢

转载自blog.csdn.net/Tacks/article/details/82493743