Login
网站首页 > 文章中心 > 其它

Redis之无序集合_set)类型命令

作者:小编 更新时间:2023-08-16 12:10:00 浏览量:174人看过

Redis 的 Set 是 String 类型的无序集合.集合成员是唯一的,这就意味着集合中不能出现重复的数据.

Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1).

集合的性质: 唯一性,无序性,确定性

注: 在string和link的命令中,可以通过range 来访问string中的某几个字符或某几个元素

但,因为集合的无序性,无法通过下标或范围来访问部分元素.所以呢想看元素,要么随机先一个,要么全选?

使用场景 : 抽奖,点赞,标签,互相关注,好友推荐

sadd : 添加一个或者多个元素到集合中,成功返回新添加到集合的元素数量,已存在的会被忽略,不是集合类型返回错误


12⑦0.0.1:6379> sadd yhq name age sex name
(integer) 3
12⑦0.0.1:6379> sadd yhq id
(integer) 1

smembers : 返回集合所有元素 (sinter 单个集合)


12⑦0.0.1:6379> smembers yhq
1) "id"
2) "age"
3) "sex"
4) "name"

12⑦0.0.1:6379> sinter yhq

1) "id"

2) "age"

3) "sex"

4) "name"

scard : 返回集合元素数量,不存在返回0


12⑦0.0.1:6379> scard yhq
(integer) 4

sdiff : 返回多个集合的差集,差集结果基于前面的集合


12⑦0.0.1:6379> smembers yhq
1) "id"
2) "age"
3) "sex"
4) "name"
12⑦0.0.1:6379> smembers qhh
1) "id"
2) "name"
12⑦0.0.1:6379> sdiff yhq qhh
1) "age"
2) "sex"

sdiffstore : 将差集(差集结果基于前面的集合)存到指定集合,如果存在覆盖,返回集合元素个数


12⑦0.0.1:6379> smembers yhq
1) "id"
2) "age"
3) "sex"
4) "name"
12⑦0.0.1:6379> smembers qhh
1) "id"
2) "name"
12⑦0.0.1:6379> sdiffstore diffs yhq qhh
(integer) 2
12⑦0.0.1:6379> smembers diffs
1) "age"
2) "sex"

sinter : 返回指定集合的交集,不存在集合视为空集合,当有空集合时,结果也为空集(key不存在视为空,一个空全是空)


12⑦0.0.1:6379> smembers yhq
1) "id"
2) "age"
3) "sex"
4) "name"
12⑦0.0.1:6379> smembers qhh
1) "id"
2) "name"
12⑦0.0.1:6379> smembers yhqqhh
1) "age"
2) "id"
3) "name"
12⑦0.0.1:6379> sinter yhq qhh yhqqhh
1) "id"
2) "name"
12⑦0.0.1:6379> sinter yhq qhh yhqqhh a
(empty list or set)

sinterstore : 将交集存到一个集合,存在覆盖,返回集合个数


12⑦0.0.1:6379> sinterstore inters yhq qhh yhqqhh 
(integer) 2
12⑦0.0.1:6379> smembers inters
1) "id"
2) "name"

sismember : 判断是否是集合元素,存在返回1,不存在或者不是返回0


12⑦0.0.1:6379> sismember yhq name
(integer) 1
12⑦0.0.1:6379> sismember yhq name1
(integer) 0

spop : 随机移除一个或多个元素,返回移除的元素,集合不存在或者空集合返回nil(srandmember返回随机元素,不对集合修改)[count ③2◆版本可以指定移除数量,count大于集合数返回整个集合]


12⑦0.0.1:6379> smembers yhq
1) "id"
2) "sex"
3) "name"
12⑦0.0.1:6379> spop yhq
"name"
12⑦0.0.1:6379> smembers yhq
1) "id"
2) "sex"


12⑦0.0.1:6379> smembers yhq
1) "age"
2) "id"
3) "name"
4) "sex"
12⑦0.0.1:6379> srandmember yhq 2
1) "id"
2) "age"
12⑦0.0.1:6379> srandmember yhq 2
1) "id"
2) "name"
12⑦0.0.1:6379> srandmember yhq -3
1) "age"
2) "sex"
3) "age"

smove : 将m元素从一个a集合移到另一个b集合,如果a集合不存在m,命令不执行,返回0.否则m从a移到b,当b中以包含m时,命令仅是从a中移除m,ab不是集合类型,返回错误


12⑦0.0.1:6379> smembers qhh
1) "id"
2) "name"
12⑦0.0.1:6379> smove yhq qhh age
(integer) 1
12⑦0.0.1:6379> smembers qhh
1) "age"
2) "id"
3) "name"

=2.4可以移除多个元素


12⑦0.0.1:6379> smembers qhh
1) "age"
2) "id"
3) "sex"
4) "name"
12⑦0.0.1:6379> srem qhh age id
(integer) 2
12⑦0.0.1:6379> smembers qhh
1) "sex"
2) "name"

sunion : 返回集合并集


12⑦0.0.1:6379> smembers yhq
1) "age"
2) "id"
3) "name"
4) "sex"
12⑦0.0.1:6379> smembers qhh
1) "sex"
2) "name"
12⑦0.0.1:6379> smembers yhqqhh
1) "age"
2) "id"
3) "name"
12⑦0.0.1:6379> sunion yhq qhh yhqqhh
1) "age"
2) "id"
3) "name"
4) "sex"

sunionstore : 将集合并集存储到指定集合中,如果存在覆盖


12⑦0.0.1:6379> sunionstore sst yhq qhh yhqqhh
(integer) 4
12⑦0.0.1:6379> smembers sst
1) "age"
2) "id"
3) "name"
4) "sex"

sscan :迭代集合元素(未完全理解)


12⑦0.0.1:6379> sscan yhq 0 match a*
1) "0"
2) 1) "age"
   2) "add"
   3) "apple"

以上就是土嘎嘎小编为大家整理的Redis之无序集合_set)类型命令相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章