Redis 集合(Set)命令
前言
通过对Redis中集合(Set)命令的概览,发现集合命令本身并没有太大的难点。其主要还是对于数学集合的一些操作,相对于List类型来说,还是简单许多的。集合和列表的区别在于,集合是没有顺序的,同时,集合中也不存在相同的元素,即同一个元素在集合中只能出现一次。
初级命令
SAdd
从命令的命名中,我们就可以了解到,这儿命令是向集合中添加元素,其是Set Add的缩写。其命令为:SAdd key value1 …valueN
是对集合的增操作。这个命令不仅仅可以向集合中添加一个元素,而且可以添加多个元素。但是请注意,由于集合的特性,当你向集合中添加相同的元素或者集合中以及存在要添加的元素,这个元素将被忽略。该命令的返回值为:成功添加的元素数量。
既然集合是没有顺序的,那么集合中自然就不存在像列表中的那些在尾部插入,首部插入,索引插入这样的命令,只需要一个插入命令即可。当然,当我们知道了如何向集合中插入命令,我们就需要知道如何查询集合中具体元素和元素个数的命令,在这个时候,我们就需要使用这样的两个命令了:
- SCard:查询集合中元素的数量
- SMembers:查询聚合中含有那些具体元素
SCard
这个命令是Set Card的缩写,是用来查询集合中元素的数量的。其用法很简单:SCard key
,是对集合的查操作。这个命令返回元素中包含多少个元素的个数,但集合不存在的时候,返回值为0。
SMembers
这个命令是Set Membersd 缩写。顾名思义,是用来查询集合中具体的元素的,是对集合的查操作。其用法和SCard同样简单:SMembers key
。返回集合中具体的元素。
SRem
这个命令是Set Remove的缩写。就是从集合中移除指定的一个或者多个元素。是对集合的删操作。其命令和SAdd同样简单:SRem key value1 … valueN
。集合中不存在的元素将会被忽略。返回值为成功删除的个数。
升级命令
我们已经接触到了Redis中对集合的简单的增,删,查命令。但我们并没有涉及到集合的改命令,因为Redis并没有为我们提供这样的命令。为什么呢?因为在集合中,我们并不需要精确的去查找某个元素,如果我们需要使用集合中的某个精确的元素,那我们为什么还有去在集合中查找呢?直接使用不就好了吗?如果我们需要确认集合中是否有这个元素,或者我们需要随机的访问集合中的某个或者某几个元素,Redis还是为我们提供了相关的命令的。那就让我们来看看吧!
SIsMember
确定某个元素是否属于集合或者说是在集合中是否存在指定的元素。其命令为:SIsMember key value
。当元素存在的时候,返回1。不存在返回0。这样,当我们需要使用集合中某个精确的元素的时候,我们就可以先使用SIsMember来确定是否存在于集合中,如果存在,直接使用,不存在则可以先SAdd
然后使用。
那么我们怎么使用集合中已经存在的随机某个或者某几个元素呢?这个时候,我们就需要使用SRandMember
命令了。
SRandMember
这个命令用于从集合中随机选取某个或者某些个已经存在的元素,并返回。其命令是:SRandMember key [count]
。在这里,参数count是可选的。参数count分一下集中情况:
- 省略。从集合中随机返回一个元素
- 正值。从集合中随机返回count个元素,并且元素不重复。当但count的值大于集合的大小的时候,会将整个集合返回。
- 负值。从集合中随机返货count个元素,但元素可能重复。
Redis的这个SRandMember的命令,为我们提供了可以从原来集合中随机访问不含重复元素的方法,也提供了随机访问含重复元素的方法。
和SRandMemberd相似的一个命令是SPop。
SPop
Redis的SPop命令用于移除并返回集合中的一个元素。它和命令SRandMember的相同之处是都是随机访问。不同之处如下:
SPop:
+ 对集合有操作,会在集合中删除返回的元素
+ 一次只能返回一个元素
SRandMember:
- 不影响原集合的元素
- 一次可以返回多个值
SMove
SMove命令是将一个元素从source移动到destation中。如果destation中已经存在该元素,则该元素将被忽略。但此时该元素已经从source中删除。其命令为:SMove source dest value
。如果value不存在于source,则返回0。不执行操作。
SScan
这个命令用于迭代集合中的元素,其命令为:SScan key cursor [Match pattern] [Count count]
。其中的pattern用于模式匹配,如果包含这个参数,则只迭代符合模式的元素。如果指定count,则最多返回count个元素。
集合的其它操作
我们都知道,集合有交集,合集(又叫并集),差集。那么Redis中的集合是否也支持这中操作呢?答案是肯定的。其对应的方法分别是SInter,SUion和SDiff。其对应的含有的存储命令为SInterStore,SUionStore和SDiffStore。这个几个命令的用法都是大同小异,所以,我这里只以SUion和SUionStore为例,来介绍一下其用法。
SUion
求多个集合的合集。其命令为:SUion key1 … keyN
。返回合集成员的列表。
SUionStore
求多个集合的合集,并将结果存储在一下新的集合例。其命令为:SUion destation key1 … keyN
。返回集合中元素的数量,而这几个集合的合集已经存储到了destation中。
SInter,SDiff,SInterStore,SDiffStore
这四个命令的用法和SUion、SUionStore是相似的,在此不再赘述。
总结
通过概览,我们知道Redis中集合的命令是不复杂的,只要我们在使用的过程中明确自己的需求和目的,这些命令已经可以满足我们平时对于集合的操作。更多的总结和坑还需要我们在实践中慢慢去体会,慢慢成长。
文章中有什么瑕疵和需要改进的地方,希望大家之处改正。