redis Set类型命令(无序集合)
sadd
语法:sadd key member [member ...]
将一个或多个元素加入到集合中,添加已存在的集合元素将被忽略(不会添加上),返回添加成功的元素个数
例子:
127.0.0.1:6379> sadd setA zhangsan lisi wangwu baobao zhangsan
(integer) 4
-- 成功添加四个元素,其中zhangsan重复了,无法重复添加
srem
语法:srem key member [member ...]
删除指定的元素;如果指定的元素不是集合成员则被忽略,返回被删除元素个数,不含不存在的元素
spop
语法:spop key [count]
从集合key中删除一个或多个随机元素,并返回删除的元素
srandmember
语法:srandmember key [count]
随机返回集合key中的一个或多个随机元素,若返回个数的count大于集合总数则返回全部
与spop不同, srandmember随机返回不删除原集合,spop返回并删除原集合返回的元素
sdiff
语法:sdiff key [key ...]
返回第一个集合与其它集合之间的差异;说白就是第一个集合的某个元素在其它集合都不存在则这个元素会被返回,
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SDIFF key1 key2 key3 = {b,d}
注:如果只携带一个key比较则会返回当前集合全部元素
例子:
127.0.0.1:6379> sadd setA zhangsan lisi wangwu baobao zhangsan
(integer) 4
127.0.0.1:6379> sadd setB fujian xiamen zhangsan baobao
(integer) 4
127.0.0.1:6379> sdiff setA setB
1) "wangwu"
2) "lisi"
sdiffstore
语法:sdiffstore destination key [key ...]
此命令和sdiff功能差不多,不同的是它将结果保存到destination集合,并返回成功添加到新集合上的个数。
例子:
127.0.0.1:6379> sdiffstore newset setA setB
(integer) 2
sinter
语法:sinter key [key ...]
返回第一个集合与其它集合之间的交集;说白就是第一个集合的某个元素在其它集合都存在则这个元素会被返回,
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SINTER key1 key2 key3 = {c}
注:如果只携带一个key比较则会返回当前集合全部元素
例子:
127.0.0.1:6379> sadd setA zhangsan lisi wangwu baobao zhangsan
(integer) 4
127.0.0.1:6379> sadd setB fujian xiamen zhangsan baobao
(integer) 4
127.0.0.1:6379> sinter setA setB
1) "zhangsan"
2) "baobao"
sinterstore
语法:sinterstore destination key [key ...]
此命令和sinter功能差不多,不同的是它将结果保存到destination集合,并返回成功添加到新集合上的个数。
例子:
127.0.0.1:6379> sinterstore newset setA setB
(integer) 2
sunion
语法:sunion key [key ...]
用于返回所有给定集合的并集 key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
sunion key1 key2 key3 = {a,b,c,d,e}
注:如果只携带一个key比较则会返回当前集合全部元素
例子:
127.0.0.1:6379> sadd setA zhangsan lisi wangwu baobao zhangsan
(integer) 4
127.0.0.1:6379> sadd setB fujian xiamen zhangsan baobao
(integer) 4
127.0.0.1:6379> sunion setA setB
1) "baobao"
2) "zhangsan"
3) "lisi"
4) "fujian"
5) "wangwu"
6) "xiamen"
sunionstore
语法:sunionstore destination key [key ...]
类似于sunion,不同的是不返回结果集,而是把返回存储在destination集合中。
例子:
127.0.0.1:6379> sunionstore newset setA setB
(integer) 6
scard
语法:scard key
返回集合中元素的数量
smembers
语法:smembers key
返回存储在key中的集合的所有的成员,此命令可以使用携带单个key的sdiff、sinter、sunion命令替代
sismember
语法:sismember key member
判断元素member是否是集合key的成员,是返回1,否则0
127.0.0.1:6379> sismember setA zhangsan
(integer) 1
smove
语法:smove source destination member
从集合source中移动成员member到集合destination;
注:返回1代表成功,返回0代表移动element元素在source不存在
注:移动成功后会把element元素在原集合上删除
注:若被移动的元素在两个集合都存在,则会覆盖移动,再删除原集合上的元素
例子:
smove setA setB zhangsan -- 把元素zhangsan从集合setA移动到setB上
sscan
语法:sscan key cursor [match pattern] [count count]
用于遍历集合中键的元素,sscan继承自scan,具体可以参考scan,上面第三章有说明
key:迭代指定元素
cursor:游标(告诉迭代器从哪开始迭代)
[match pattern]:过滤筛选条件
[count count]:迭代的个数
例子(每次迭代两个):
127.0.0.1:6379> sscan setA 0 match * count 2
1) "1"
2) 1) "zhangsan"
2) "lisi"
127.0.0.1:6379> sscan setA 1 match * count 2
1) "0"
2) 1) "wangwu"
2) "baobao"