Redis数据结构-集合

155 阅读3分钟
简介
  • 集合以无序的方式存储多个各不相同的元素
  • 可以快速地向集合添加元素,或者从集合里面删除元素,也可以对多个集合进行集合运算操作:并集、交集和差集
  • 相当于Java中的Set

不要使用集合来储存有序的数据。如果想要储存有序且重复的值,可以使用列表;如果想要储存有序且无重复的值,可以使用有序集合

元素操作
  • SADD key element [element ...] 将一个或多个元素添加到给定的集合里面,已经存在于集合的元素会自动被忽略,命令返回新添加到集合的元素数量

    127.0.0.1:6379> sadd set hi hello haha hehe
    (integer) 4
    127.0.0.1:6379> sadd set hi 
    (integer) 0
    
  • SREM key element [element ...] 移除集合中的一个或者多个元素,不存在于集合中的元素会自动被忽略,命令返回存在并且被移除的元素数量

    127.0.0.1:6379> srem set hi hello world
    (integer) 2
    
  • SISMEMBER key element 检查给定的元素是否存在于集合,存在的话返回 1 如果元素不存在,或者给定的键不存在,那么返回 0

    127.0.0.1:6379> sismember set hello 
    (integer) 0
    127.0.0.1:6379> sismember set hehe
    (integer) 1
    
  • SCARD key 返回集合包含的元素数量

    127.0.0.1:6379> scard set
    (integer) 2
    
  • SMEMBERS key 返回集合包含的所有元素

    127.0.0.1:6379> smembers set
    1) "haha"
    2) "hehe"
    

    当集合的基数比较大时,执行这个命令可能会造成服务器阻塞 对于同一相同的集合元素,同一个集合命令可能会返回不同的结果:集合的无序性

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

    127.0.0.1:6379> spop set
    "haha"
    127.0.0.1:6379> spop set
    "hehe"
    127.0.0.1:6379> spop set
    (nil)
    
  • SRANDMEMBER key [count] 从集合里面随机地返回元素 如果没有给定可选的 count 参数,那么命令随机地返回集合中的一个元素 如果给定了 count 参数,那么:  • 当 count 为正数,并且少于集合基数时,命令返回一个包含 count 个元素的数组,数组中的每个元素各不相同。如果 count 大于或等于集合基数,那么命令返回整个集合  • 当 count 为负数时,命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为count 的绝对值

    和SPOP不同,SRANDMEMBER不会移除被返回的元素

    127.0.0.1:6379> srandmember set  
    "world"
    127.0.0.1:6379> srandmember set  10
    1) "hello"
    2) "hi"
    3) "haha"
    4) "world"
    5) "hehe"
    127.0.0.1:6379> srandmember set  -10
    1) "world"
    2) "hello"
    3) "hello"
    4) "hehe"
    5) "hello"
    6) "world"
    7) "world"
    8) "world"
    9) "hi"
    10) "hi"
    
集合运算操作
  • SDIFF key [key ...] 计算所有给定集合的差集,并返回结果

    127.0.0.1:6379> sadd num1 123 456 666
    (integer) 3
    127.0.0.1:6379> 
    127.0.0.1:6379> sadd num2 123 456 777 888
    (integer) 4
    127.0.0.1:6379> sdiff num1 num2
    1) "666"
    127.0.0.1:6379> sdiff num2 num1
    1) "777"
    2) "888"
    
  • SDIFFSTORE destkey key [key ...] 计算所有给定集合的差集,并将结果储存到 destkey

    127.0.0.1:6379> sdiffstore num3  num2 num1
    (integer) 2
    127.0.0.1:6379> smembers num3
    1) "777"
    2) "888"
    
  • SINTER key [key ...] 计算所有给定集合的交集,并返回结果

    127.0.0.1:6379> sinter num1 num2
    1) "123"
    2) "456"
    127.0.0.1:6379> sinter num2 num1
    1) "123"
    2) "456"
    
  • SINTERSTORE destkey key [key ...] 计算所有给定集合的交集,并将结果储存到destkey

    127.0.0.1:6379> sinterstore num4 num1 num2
    (integer) 2
    127.0.0.1:6379> smembers num4
    1) "123"
    2) "456"
    
  • SUNION key [key ...] 计算所有给定集合的并集,并返回结果

    127.0.0.1:6379> sunion num1 num2
    1) "123"
    2) "456"
    3) "666"
    4) "777"
    5) "888"
    127.0.0.1:6379> sunion num2 num1
    1) "123"
    2) "456"
    3) "666"
    4) "777"
    5) "888"
    
  • SUNIONSTORE destkey key [key ...] 计算所有给定集合的并集,并将结果储存到destkey

    127.0.0.1:6379> sunionstore num5  num2 num1
    (integer) 5
    127.0.0.1:6379> smembers num5
    1) "123"
    2) "456"
    3) "666"
    4) "777"
    5) "888"