Redis数据结构和内部编码--集合(Set)

Redis数据结构和内部编码--集合(Set)

一.概念

集合也是用来存储多个字符串元素,但和列表示有区别的,集合中的元素是无序且无重复的,不能用下标来获取元素。在Redis中,一个集合最多可以存储2^32个元素,除了支持对集合的增删改查外,还支持对多个集合取交集、并集、差集。

 

二. 命令
2.1 添加元素

命令:sadd key value[value2…],返回添加成功的元素个数

例如:sadd sets v1 v2

返回:2

2.2 删除元素

命令:srem key value[value2…],返回成功删除的元素个数

例如:sadd sets v1 v2 v3

     srem sets v2 v3

返回:2

2.3 计算元素个数

命令:scard key

例如:sadd sets v1 v2 v3

     scard sets

返回:3

2.4 判断元素是否在集合中

命令: sismember key element,如果元素在集合中返回1,否则返回0

例如:sadd sets v1 v2 v3

     sismember sets v1

返回:1

2.5 随机从集合中返回指定个数的元素

命令: srandmember key [count], count为可选参数,不选表示1.

例如:sadd sets v1 v2 v3

     srandmember sets 2

返回:集合sets中任意的2个元素

2.6 从集合中随机弹出元素

命令: spop key [count], count为可选参数,不选表示1.

例如: sadd sets v1 v2 v3

     spopsets 2

返回:随机弹出的2个元素

2.7 获取所有元素

命令:smembers key

例如:sadd sets v1 v2 v3

     smembrs sets

返回:v1

     v3

     v2

2.8 求多个集合的交集

命令:sinter key[key2..]

例如:sadd set1 v1 v2

      sadd set2 v2 v3 v4

     sinter set1 set2

返回:v2

2.9 求多个集合的并集

命令:sunion key[key2..]

例如:sadd set1 v1 v2

      sadd set2 v2 v3 v4

     sunion set1 set2

返回:v1

v2

v3

v4

2.10 求多个集合的差集

命令:sdiff key[key2..] 返回所有属于集合key且不属于集合key2的元素

例如:sadd set1 v1 v2

      sadd set2 v2 v3 v4

     sdiff set1 set2

返回:v1

v3

v4

2.11将交集、并集、差集的结果保存

命令:

(1)      sinterstore destinationkey[key2…]

(2)      sunionstore destinationkey[key2…]

(3)      sdiffstore destination key[key2…]

例如:sadd set1 v1 v2

      sadd set2 v2 v3 v4

     sinterstore interstore set1 set2

     smembers interstore

返回:v2

 

三. set命令的时间复杂度

Redis数据结构和内部编码--集合(Set)_第1张图片

四. 内部编码

集合类型的内部编码有两种:

(1)      intset(整数集合),当集合中的元素都是整数,且元素个数小于set-max-intset-entries配置(默认512个)时,Redis会采用intset来做为集合的内部实现,从而减少内存的使用。

(2)      hashtable(哈希表),当集合类型无法满足intset的条件时,Redis就会使用hashtable做为集合的内部实现。

五. 集合的使用场景及方案

(1)sadd = Tagging(标签)

(2)spop/srandmember=Random item生产随机数(抽奖)

(3)sadd+sinter=Social Graph(社交生活)

你可能感兴趣的:(缓存,分布式缓存-redis)