• redis数据类型-集合类型


    集合类型

    在集合中的每个元素都是不同的,且没有顺序。
    一个集合类型(set)键可以存储至多2 32-1个(相信这个数字对大家来说已经很熟悉了)字符串。

    集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等,由于集合类型在Redis内部是使用值为空的散列表(hash table)实现的,所以这些操作的时间复杂度都是0(1)。
    最方便的是多个集合类型键之间还可以进行并集、交集和差集运算,稍后就会看到灵活运用这一特性带来的便利。

    增加/删除元素

    SADD key member [member …]
    SREM key member [member …]
    SADD命令用来向集合中增加一个或多个元素,如果键不存在则会自动创建。因为在一个集合中不能有相同的元素,所以如果要加入的元素已经存在于集合中就会忽略这个元素。本命令的返回值是成功加入的元素数量(忽略的元素不计算在内)。例如:

    redis> SADD letters a
    (integer) 1
    redis> SADD letters a b c
    (integer) 2
    

    第二条SADD命令的返回值为2是因为元素“a”已经存在,所以实际上只加入了两个元素。
    SREM命令用来从集合中删除一个或多个元素,并返回删除成功的个数,例如:

    redis> SREM letters c d
    (integer) 1
    

    由于元素“d”在集合中不存在,所以只删除了一个元素,返回值为1。

    获得集合中的所有元素

    SMEMBERS key
    SMEMBERS命令会返回集合中的所有元素,例如:

    redis> SMEMBERS letters
    1) "b"
    2) "a"
    

    判断元素是否在集合中

    SISMEMBER key member
    判断一个元素是否在集合中是一个时间复杂度为0(1)的操作,无论集合中有多少个元素, SISMEMBER命令始终可以极快地返回结果。当值存在时SISMEMBER命令返回1,当值不存在或键不存在时返回0,例如:

    redis> SISMEMBER letters a
    (integer) 1
    redis> SISMEMBER letters d
    (integer) 0
    

    集合间运算

    • SDIFF key [key …]
    • SINTER key [key …]
    • SUNION key [key …]
      接下来要介绍的3个命令都是用来进行多个集合间运算的。
    差集运算

    (1) SDIFF命令用来对多个集合执行差集运算。集合A与集合B的差集表示为A-B,代表所
    有属于A且不属于B的元素构成的集合(如图3-13所示),即A-B={x|x∈ A且x∈ /B}。例如:.

    SDIFF命令的使用方法如下:

    redis> SADD setA 1 2 3
    (integer) 3
    redis> SADD setB 2 3 4
    (integer) 3
    redis> SDIFF setA setB
    1) "1"
    redis> SDIFF setB setA
    1 ) "4"
    #SDIFF 命令支持同时传入多个键,例如:
    redis> SADD setC 2 3
    (integer) 2
    redis> SDIFF setA setB setC
    1 ) "1"
    

    计算顺序是先计算setA-setB,再计算结果与setC的差集。

    交集运算

    SINTER命令用来对多个集合执行交集运算。集合A与集合B的交集表示为A∩B,代表所有属于A且属于B的元素构成的集合(如图3-14所示),即A∩B={x|x∈ A且x∈ B}。例如:

    {1, 2, 3}∩{2, 3, 4}={2, 3}
    SINTER命令的使用方法如下:

    redis> SINTER setA setB
    1) "2"
    2) "3"
    SINTER命令同样支持同时传入多个键,如:
    redis> SINTER setA setB setC
    1) "2"
    2) "3"
    
    并集运算

    SUNION命令用来对多个集合执行并集运算。集合A与集合B的并集表示为AUB,代表所有属于A或属于B的元素构成的集合(如图3-15所示),即AUB={x|x∈ A 或x∈ B}。例如:

    {1, 2, 3}∪ {2, 3, 4}={1, 2, 3, 4}
    SUNION命令的使用方法如下:

    redis> SUNION setA setB
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    

    SUNION命令同样支持同时传入多个键,例如:

    redis> SUNION setA setB setC
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    
    获得集合中元素个数

    SCARD key
    SCARD命令用来获得集合中的元素个数,例如:

    redis> SMEMBERS letters
    1) "b"
    2) "a"
    redis> SCARD letters
    (integer) 2
    
    进行集合运算并将结果存储
    • SDIFFSTORE destination key [key …]
    • SINTERSTORE destination key [key …]
    • SUNIONSTORE destination key [key …]

    SDIFFSTORE命令和SDIFF命令功能一样,唯一的区别就是前者不会直接返回运算结果,
    而是将结果存储在destination键中。
    SDIFFSTORE命令常用于需要进行多步集合运算的场景中,如需要先计算差集再将结果
    和其他键计算交集。
    SINTERSTORESUNIONSTORE命令与之类似,不再赘述。

  • 相关阅读:
    G
    C
    B
    B
    线段树模板
    网络流模板
    POJ_1631_Bridging_Signals_(动态规划,LIS)
    POJ_1065_Wooden_Sticks_(动态规划,LIS+鸽笼原理)
    BZOJ_1015_星球大战_[JSOI2008]_(并查集)
    POJ_3280_Cheapest_Palindrome_(动态规划)
  • 原文地址:https://www.cnblogs.com/Csir/p/8244216.html
Copyright © 2020-2023  润新知