Redis——常用数据类型set

set

谈到set这个术语,可能会有多种含义

  1. 集合
  2. 设置(get对应)
普通命令
sadd
SADD key member [member ...]

//将⼀个或者多个元素添加到 set 中。注意,重复的元素⽆法添加到 set 中
//时间复杂度:O(1)
//返回值:本次添加成功的元素个数
smembers key
SMEMBERS key

//获取集合中的所有元素
//时间复杂度:O(N) N为集合中元素的个数
//返回值:所有元素的列表
sismember
SISMEMBER key member

//判断⼀个元素在不在 set 中
//时间复杂度:O(1)
//返回值:1 表⽰元素在 set 中。0 表⽰元素不在 set 中或者 key 不存在
spop
SPOP key [count]

//从 set 中删除并返回⼀个或者多个元素。注意,由于 set 内的元素是⽆序的
//所以取出哪个元素实际是未定义⾏为,即可以看作随机的。
//时间复杂度:O(N), n 是 count
//返回值:取出的元素。
srandmember
srandmember key [count]

//获取集合中随机一个元素
scard
SCARD key

//获取⼀个 set 的基数(cardinality),即 set 中的元素个数
//时间复杂度:O(1)
//返回值:set 内的元素个数
smove
SMOVE source destination member

//将⼀个元素从源 set 取出并放⼊⽬标 set 中
//时间复杂度:O(1)
//返回值:1 表⽰移动成功,0 表⽰失败
srem
SREM key member [member ...]

//将指定的元素从 set 中删除
//时间复杂度:O(N), N 是要删除的元素个数
//返回值:本次操作删除的元素个数
集合间操作
sinter
SINTER key [key ...]

//获取给定 set 的交集中的元素
//时间复杂度:O(N * M), N 是最⼩的集合元素个数. M 是最⼤的集合元素个数
//返回值:交集的元素
sinterstore
SINTERSTORE destination key [key ...]

//获取给定 set 的交集中的元素并保存到⽬标 set 中
//时间复杂度:O(N * M), N 是最⼩的集合元素个数. M 是最⼤的集合元素个数.
//返回值:交集的元素个数
sunion
SUNION key [key ...]

//获取给定 set 的并集中的元素
//时间复杂度:O(N), N 给定的所有集合的总的元素个数.
//返回值:并集的元素
sunionstore
SUNIONSTORE destination key [key ...]

//获取给定 set 的并集中的元素并保存到⽬标 set 中
//时间复杂度:O(N), N 给定的所有集合的总的元素个数.
//返回值:并集的元素个数
sdiff
SDIFF key [key ...]

//获取给定 set 的差集中的元素
//时间复杂度:O(N), N 给定的所有集合的总的元素个数.
//返回值:差集的元素
sdiffstore
SDIFFSTORE destination key [key ...]

//获取给定 set 的差集中的元素并保存到⽬标 set 中
//时间复杂度:O(N), N 给定的所有集合的总的元素个数.
//返回值:差集的元素个数
set的编码方式

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

  • intset(整数集合):当集合中的元素都是整数并且元素的个数小于 set-max-intset-entries 配置 (默认 512 个)时,Redis 会选用 intset 来作为集合的内部实现,从⽽减少内存的使⽤。
  • hashtable(哈希表):当集合类型无法满足 intset 的条件时,Redis 会使⽤ hashtable 作为集合 的内部实现。
  1. 当元素个数较少并且都为整数时,内部编码为 intset
  2. 当元素个数超过 512 个,内部编码为 hashtable
  3. 当存在元素不是整数时,内部编码为 hashtable
set的应用
  1. 给用户添加标签
  2. 给标签添加用户
  3. 删除用户下的标签
  4. 删除标签下的用户
  5. 计算用户的共同兴趣标签
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚安刘十三

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值