《Redis开发与运维》---- 集合Set

集合(set)。不允许有重复元素,无序,不能通过索引下标获取元素。一个集合最多可以存储2^32-1个元素。支持集合内的增删改查,集合的交集、并集、差集。

命令

  • 集合内

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

srem key element [element ...] # 删除元素

scard key # 计算元素个数 时间复杂度O(1),不会遍历集合,取的是redis中存储的一个变量

sismember key element # 判断元素是否在集合中,在集合内返回1,不在返回0

srandmember key [count] # 随机从集合中返回指定个数元素

spop key  [count] # 从集合随机弹出指定个数的元素

smembers key # 获取所有元素; PS: 如果元素过多,存在阻塞redis的可能。可以用sscan来完成。

  • 集合间
# 求多个集合的交集
sinter key [key ...]

# 求多个集合的并集
suinon key [key ...]

# 求多个集合的差集
sdiff key [key ...] 
sdiff A B # 会列出A与B中A不同的元素, 作用前面一个集合
sdiff B A # 会列出A与B中B不同的元素, 作用前面一个集合

# 将集合操作的结果保存
sinterstore/suionstore/sdiffstore  destination key [key ...] 

内部编码

  • intset(整数集合) : 当集合中的元素都是整数且元素个数小于set-maxintset-entries配置(默认512个)时, Redis会选用intset来作为集合的内部实现,从而减少内存的使用。
  • hashtable(哈希表) : 当集合类型无法满足intset的条件时, Redis会使用hashtable作为集合的内部实现。

使用场景

  • sadd = Tagging (用户打标签 使用sinter命令计算用户共同感兴趣的标签)
  • spop/srandmember = Random item ( 生成随机数,比如抽奖)
  • sadd + sinter = Social Graph (社交需求)
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页