美文网首页
005.Redis基本数据结构四:集合

005.Redis基本数据结构四:集合

作者: CoderJed | 来源:发表于2020-03-21 11:39 被阅读0次

    1. 集合简介

    集合(set)类型用来保存多个字符串元素,但和列表类型不一样的是,集合中不允许有重复元素,并且集合中的元素是无序的,不能通过索引下标获取元素。

    2. 常用命令

    # (1) 添加元素
    beh07:6379> SADD hobbies book music
    (integer) 2 # 返回添加成功的元素的个数
    beh07:6379> SADD hobbies book
    (integer) 0
    
    # (2) 删除元素
    beh07:6379> SREM hobbies music
    (integer) 1 # 返回删除成功的个数
    
    # (3) 统计集合中元素的个数
    beh07:6379> SCARD hobbies
    (integer) 1
    
    # (4) 判断元素是否在集合中,1代表true,0代表false
    beh07:6379> SISMEMBER hobbies music
    (integer) 0
    beh07:6379> SISMEMBER hobbies book
    (integer) 1
    
    # (5) 从集合中随机返回指定个数的元素(默认返回一个)
    beh07:6379> SADD nums 1 2 3 4 5 6 7 8 9
    (integer) 9
    beh07:6379> SRANDMEMBER nums
    "3"
    beh07:6379> SRANDMEMBER nums 3
    1) "4"
    2) "7"
    3) "3"
    
    # (6) 从集合中随机弹出一个元素(该元素被删除)
    beh07:6379> SPOP nums 
    "7"
    beh07:6379> SPOP nums 3
    1) "4"
    2) "2"
    3) "9"
    beh07:6379> SMEMBERS nums
    1) "1"
    2) "3"
    3) "5"
    4) "6"
    5) "8"
    
    # (7) 获取全部元素
    beh07:6379> SMEMBERS nums
    1) "1"
    2) "3"
    3) "5"
    4) "6"
    5) "8"
    

    3. 集合间操作

    beh07:6379> SADD nums1 1 2 3 4 5
    (integer) 5
    beh07:6379> SADD nums2 1 3 5 7 9
    (integer) 5
    
    # (1) 交集
    beh07:6379> SINTER nums1 nums2
    1) "1"
    2) "3"
    3) "5"
    
    # (2) 并集
    beh07:6379> SUNION nums1 nums2
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    5) "5"
    6) "7"
    7) "9"
    
    # (3) 差集(求左边存在而右边不存在的元素)
    beh07:6379> SDIFF nums1 nums2
    1) "2"
    2) "4"
    beh07:6379> SDIFF nums2 nums1
    1) "7"
    2) "9"
    
    # (4) 将集合运算结果保存到另一个集合中
    # 将nums1和nums2这两个集合的交集保存到nums1_inter_nums2这个集合中
    # SUNIONSTORE和SDIFFSTORE这两个命令的作用同理
    beh07:6379> SINTERSTORE nums1_inter_nums2 nums1 nums2
    (integer) 3
    beh07:6379> SMEMBERS nums1_inter_nums2
    1) "1"
    2) "3"
    3) "5"
    

    4. 内部编码

    当集合中的元素都是整数且元素个数小于set-max-intset-entries这个配置的值时,Redis会选用intset来作为集合的内部实现,从而减少内存的使用。

    set-max-intset-entries 512
    
    beh07:6379> SADD nums 1 2 3
    (integer) 3
    beh07:6379> object encoding nums
    "intset"
    

    当set中存储的是字符串类型的值或者存储的int类型的值的个数大于set-max-intset-entries设置的值后,Redis会选用hashtable来作为集合的内部实现。

    beh07:6379> sadd names tom tony 
    (integer) 2
    beh07:6379> object encoding names
    "hashtable"
    

    相关文章

      网友评论

          本文标题:005.Redis基本数据结构四:集合

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