redis_set

集合set

  • 集合中不允许有重复元素

  • 元素是无序的,不能通过索引下标获取元素

  • 1:命令--集合内操作

    • 添加元素 sadd key element [element ...]

      127.0.0.1:6379> exists myset     #检查key是否存在
      (integer) 0
      127.0.0.1:6379> sadd myset a b c  #添加
      (integer) 3
      127.0.0.1:6379> sadd myset a b    #不能添加重复元素
      (integer) 0
      
      #O(k),k是元素的个数
      
    • 删除元素 srem key element [element ...]

      127.0.0.1:6379> srem myset a b
      (integer) 2
      127.0.0.1:6379> srem myset hello    # 删除不存在的值
      (integer) 0
      
      #O(k),k是元素的个数
      
    • 计算元素的个数 scard key

      127.0.0.1:6379> scard  myset
      (integer) 1
      
    • 判断元素是否在集合中 sismember key element

      127.0.0.1:6379> sismember myset c
      (integer) 1
      127.0.0.1:6379> smembers myset   #查看集合中所有元素
      1) "c"
      
    • 随机从集合中返回指定个数的元素,默认值是1 srandmember key [count]

      127.0.0.1:6379> smembers myset
      1) "e"
      2) "a"
      3) "c"
      4) "b"
      127.0.0.1:6379> srandmember myset    --不删除元素
      "a"
      127.0.0.1:6379> srandmember myset 3
      1) "c"
      2) "a"
      3) "b"
      127.0.0.1:6379> smembers myset
      1) "e"
      2) "a"
      3) "c"
      4) "b"
      
      #O(count)
      
    • 从集合中随机弹出元素 spop key

      127.0.0.1:6379> spop myset   --弹出了,相当于从元素中删除这个元素
      "b"
      127.0.0.1:6379> spop myset
      "e"
      127.0.0.1:6379> smembers myset   #弹出之后集合中的元素
      1) "a"
      2) "c"
      
    • 获取集合中所有的元素

    • 127.0.0.1:6379> smembers myset
      1) "a"
      2) "c"
      
      #O(n),n是元素的个数
      
  • 2集合间操作

    ​ 创建2个集合

    127.0.0.1:6379> sadd user:1:follow  it music his sports
    (integer) 4
    127.0.0.1:6379> sadd user:2:follow  it news  ent  sports
    (integer) 4
    

    • 交集 sinter key [key ..]

      127.0.0.1:6379> sinter user:1:follow user:2:follow
      1) "sports"
      2) "it"
      
      #O(m*k):m是键的个数,k是多个集合中元素最少的个数
      
    • 并集

      127.0.0.1:6379> sunion user:1:follow user:2:follow
      1) "ent"
      2) "sports"
      3) "news"
      4) "it"
      5) "his"
      6) "music"
      #O(k),k是多个集合元素的个数和
      
    • 差集

      127.0.0.1:6379> sdiff user:1:follow user:2:follow
      1) "music"
      2) "his"
      
      #O(k),k是多个集合元素的个数和
      
    • 将交集,并集,差集的结果保存到指定的集合类型中

    • sinterstore destination key [key...

    • sunionstore destination key [key...]

    • sdiffstore destination key [key...]

      127.0.0.1:6379> sinterstore user:1_2:inter  user:1:follow user:2:follow
      (integer) 2
      127.0.0.1:6379> type user:1_2:inter
      set
      127.0.0.1:6379> smembers user:1_2:inter
      1) "sports"
      2) "it"
      
原文地址:https://www.cnblogs.com/zhoujun007/p/13131656.html