美文网首页
Redis集合SET

Redis集合SET

作者: 老陈的记事本 | 来源:发表于2019-08-18 10:58 被阅读0次

    集合特点:

    • 不允许存在重复值
    • 无序,不保证插入的顺序

    SADD key member [member …] 插入元素

    返回成功插入的个数

    SEMEMBERS key 查看集合内成员

    SISMEMBER key member 判断 member 元素是否集合 key 的成员

    返回0/1

    SPOP key 移除并返回集合中的一个随机元素

    SRANDMEMBER key [count]

    count为可选,填写后返回随机个数的集合元素;不填写则返回1个

    • 如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。
    • 如果 count 大于等于集合基数,那么返回整个集合。
    • 如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。
    127.0.0.1:6379> srandmember s2 4
    # 随机返回4个元素
    1) "1"
    2) "d"
    3) "2"
    4) "3"
    

    SREM key member [member …] 移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。

    返回移除的数量个数,不存在的则被忽略

    127.0.0.1:6379> srem s2 1 2 3 4
    (integer) 3
    

    SMOVE source destination member 将 member 元素从 source 集合移动到 destination 集合。

    返回值

    如果 member 元素被成功移除,返回 1 。 如果 member 元素不是 source 集合的成员,并且没有任何操作对 destination 集合执行,那么返回 0

    SCARD key 返回集合中元素的数量

    127.0.0.1:6379> scard s1
    (integer) 4
    

    SMEMBERS key 返回key的所有元素,数量很多,建议使用sscan

    127.0.0.1:6379> smembers s1
    1) "d2"
    2) "d1"
    3) "d"
    4) "d3"
    

    SSCAN key cursor [MATCH pattern] [COUNT count]循环遍历

    详细信息请参考 SCAN cursor [MATCH pattern] [COUNT count] 命令。

    SINTER key [key …] 返回一个交集

    127.0.0.1:6379> smembers s1
    1) "d"
    2) "d3"
    3) "d1"
    4) "a"
    5) "b"
    6) "d2"
    127.0.0.1:6379> smembers s2
    1) "a"
    2) "c"
    3) "b"
    4) "e"
    5) "3"
    6) "d"
    127.0.0.1:6379> sinter s1 s2 sssd   #sssd是个空集
    (empty list or set)
    127.0.0.1:6379> sinter s1 s2
    1) "b"
    2) "a"
    3) "d"
    

    SINTERSTORE destination key [key …] 讲交集保存到destination

    可用版本: >= 1.0.0
    时间复杂度: O(N * M), N 为给定集合当中基数最小的集合, M 为给定集合的个数。

    这个命令类似于 SINTER key [key …] 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。

    如果 destination 集合已经存在,则将其覆盖。

    destination 可以是 key 本身。

    返回值

    结果集中的成员数量。

    代码示例

    redis> SMEMBERS songs
    1) "good bye joe"
    2) "hello,peter"
    
    redis> SMEMBERS my_songs
    1) "good bye joe"
    2) "falling"
    
    redis> SINTERSTORE song_interset songs my_songs
    (integer) 1
    
    redis> SMEMBERS song_interset
    1) "good bye joe"
    

    SUNION key [key …] 将key和[key...] 合并后返回

    可用版本: >= 1.0.0
    时间复杂度: O(N), N 是所有给定集合的成员数量之和。

    返回一个集合的全部成员,该集合是所有给定集合的并集。

    不存在的 key 被视为空集。
    并集成员的列表。

    127.0.0.1:6379> sadd  a b
    (integer) 2
    127.0.0.1:6379> sadd ss2 1 2
    (integer) 2
    127.0.0.1:6379> sunion ss1 ss2
    1) "2"
    2) "a"
    3) "1"
    4) "b"
    

    SUNIONSTORE destination key [key …] 将key和[key...]保存到destination

    可用版本: >= 1.0.0
    时间复杂度: O(N), N 是所有给定集合的成员数量之和。

    这个命令类似于SUNION key [key …]命令,但它将结果保存到 destination 集合,而不是简单地返回结果集,如果 destination 已经存在,则将其覆盖。

    返回值

    结果集中的元素数量。

    127.0.0.1:6379> sadd ss1 a b
    (integer) 2
    127.0.0.1:6379> sadd ss2 1 2
    (integer) 2
    127.0.0.1:6379> sunion ss1 ss2
    1) "2"
    2) "a"
    3) "1"
    4) "b"
    127.0.0.1:6379> sunionstore ss3 ss1 ss2
    (integer) 4
    127.0.0.1:6379> smembers ss3
    1) "2"
    2) "a"
    3) "1"
    4) "b"
    

    SDIFF key [key …] 该集合是所有给定集合和后面集合之间的差集

    可用版本: >= 1.0.0
    时间复杂度: O(N), N 是所有给定集合的成员数量之和

    返回值

    返回key和[key...] 对比的差集(key存在[key...]不存在 的元素)

    127.0.0.1:6379> smembers s3
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    127.0.0.1:6379> smembers s4
    1) "e"
    2) "2"
    3) "a"
    4) "1"
    5) "b"
    6) "c"
    127.0.0.1:6379> smembers s5
    1) "a"
    2) "b"
    3) "6"
    4) "1"
    5) "54"
    6) "8"
    127.0.0.1:6379> sdiff s3 s5
    1) "2"
    2) "3"
    3) "4"
    127.0.0.1:6379> sdiff s3 s4 s5
    1) "3"
    2) "4"
    127.0.0.1:6379> sdiff s5 s3
    1) "54"
    2) "6"
    3) "a"
    4) "b"
    5) "8"
    127.0.0.1:6379> sdiff s4 s3
    1) "e"
    2) "a"
    3) "c"
    4) "b"
    

    SDIFFSTORE destination key [key …]将SDIFF的结果保存到destination

    相关文章

      网友评论

          本文标题:Redis集合SET

          本文链接:https://www.haomeiwen.com/subject/zmqbjctx.html