learn-tech/专栏/Redis核心原理与实战/13附录:更多集合操作命令.md
2024-10-16 06:37:41 +08:00

2.9 KiB
Raw Blame History

                        因收到Google相关通知网站将会择期关闭。相关通知内容
                        
                        
                        13 附录:更多集合操作命令
                        移除并返回集合中的一个随机元素

语法spop key [count] 示例:

127.0.0.1:6379> smembers myset

  1. "v1"
  2. "v2" 127.0.0.1:6379> spop myset 1
  3. "v2" 127.0.0.1:6379> smembers myset
  4. "v1"

随机返回集合中指定数量的元素列表

语法srandmember key [count] 示例:

127.0.0.1:6379> srandmember myset 2

  1. "v4"
  2. "v2"

返回一个集合或多个集合的交集

语法sinter key [key …] 示例:

127.0.0.1:6379> smembers myset

  1. "v1"
  2. "v3"
  3. "v2" 127.0.0.1:6379> smembers myset2
  4. "v1"
  5. "v8" 127.0.0.1:6379> sinter myset myset2
  6. "v1"

把集合的交集复制到新的集合中

语法sinterstore destination key [key …] 示例:

127.0.0.1:6379> smembers myset

  1. "v1"
  2. "v3"
  3. "v2" 127.0.0.1:6379> smembers myset2
  4. "v1"
  5. "v8" 127.0.0.1:6379> sinterstore myset3 myset myset2 (integer) 1 127.0.0.1:6379> smembers myset3
  6. "v1"

命令解析:从以上代码可以看出,我们把集合 myset 和 集合 myset2 的合集元素 v1 复制到了新的集合 myset3 中,但 v1 并不会从原有集合中移除。

查询一个或多个集合的并集

语法sunion key [key …] 示例:

127.0.0.1:6379> smembers group1

  1. "java" 127.0.0.1:6379> smembers group2
  2. "golang" 127.0.0.1:6379> sunion group1 group2
  3. "java"
  4. "golang"

把一个或多个集合的并集复制到新集合中

语法sunionstore destination key [key …] 示例:

127.0.0.1:6379> smembers group1

  1. "java" 127.0.0.1:6379> smembers group2
  2. "golang" 127.0.0.1:6379> sunionstore group3 group1 group2 (integer) 2 127.0.0.1:6379> smembers group3
  3. "java"
  4. "golang"

注意:只是把一个或多个集合的并集复制到新集合中,并不会在原集合中删除复制的元素。

查询一个或多个集合的错集

语法sdiff key [key …] 示例:

127.0.0.1:6379> smembers group1

  1. "java"
  2. "golang" 127.0.0.1:6379> smembers group2
  3. "golang" 127.0.0.1:6379> sdiff group1 group2
  4. "java"

注意:执行命令时集合的先后顺序会影响返回的结果,如下所示:

127.0.0.1:6379> sdiff group1 group2

  1. "java" 127.0.0.1:6379> sdiff group2 group1 (empty list or set)

这是因为查询错集是以第一个集合为主的,当第二个元素包含第一个元素时,查询的错集结果就是空。

把一个或多个集合的错集复制到新集合

语法sdiffstore destination key [key …] 示例:

127.0.0.1:6379> smembers group1

  1. "java"
  2. "golang" 127.0.0.1:6379> smembers group2
  3. "golang" 127.0.0.1:6379> sdiffstore group3 group1 group2 (integer) 1 127.0.0.1:6379> smembers group3
  4. "java"