8.Redis-set

Set

    • 常用命令
      • sadd
      • smembers
      • sismember
      • scard
      • spop
      • smove
      • srem
      • 集合间操作
        • sinter 交集
        • sinterstore
        • sunion 并集
        • sunionstore
        • sdiff 差集
        • sdiffstore
      • 命令总结
    • 内部编码
    • 应用场景
      • 使用 set来保存用户的“标签”

set(集合)就是把一些有关联的数据放刀一起。
它与list的区别如下:

  1. 集合中的元素是无序的!
    这里说的有序是指变换顺序后,就是不同的list,具体大致如下:
    list [1, 2, 3] 和 [2, 1, 3] 是两个不同的list,而set[1, 2, 3] 和[2, 1, 3]是同一个集合
  2. 集合中的元素是不能重复的。

集合中的元素叫做 member。

常用命令

sadd

作用:将⼀个或者多个元素添加到 set 中。注意,重复的元素⽆法添加到 set 中。
语法:SADD key member [member ...]
返回值:本次添加成功的元素个数。

8.Redis-set_第1张图片

smembers

作用:获取⼀个 set 中的所有元素,注意,元素间的顺序是⽆序的。
语法:SMEMBERS key

8.Redis-set_第2张图片

sismember

作用:判断⼀个元素在不在 set 中。
语法:SISMEMBER key member
返回值:1 表⽰元素在 set 中。0 表⽰元素不在 set 中或者 key 不存在。

8.Redis-set_第3张图片

scard

作用:用于获取集合中成员的数量
语法:SCARD key
8.Redis-set_第4张图片

spop

作用:从set中随机删除一个或多个 member 并返回一个或多个随机member。
语法:SPOP key [count]

8.Redis-set_第5张图片

smove

作用:把member 从 source 上删除,再插入到 destination 中。
语法:
SMOVE source destination member
返回值:1 表⽰移动成功,0 表⽰失败。
8.Redis-set_第6张图片
如果此时有个 key2 里面 有 member元素 4了,再从key3中把这个 member元素4 移动 key2时,key3中 4 会被删除,key2中不会新增多一个4。
8.Redis-set_第7张图片

srem

作用:将指定的 member 从 set 中删除。
语法:
SREM key member [member ...]
返回值:本次操作删除的元素个数。

8.Redis-set_第8张图片

集合间操作

sinter 交集

作用:获取给定 set 的交集中的元素。
语法:SINTER key [key ...]
返回值:交集的元素。
8.Redis-set_第9张图片

sinterstore

作用:获取给定 set 的交集中的元素并保存到⽬标 set 中。
语法:SINTERSTORE destination key [key ...]
返回值:交集的元素个数。
8.Redis-set_第10张图片

sunion 并集

作用:获取给定 set 的并集中的元素。
语法:SUNION key [key ...]
8.Redis-set_第11张图片

sunionstore

作用:获取给定 set 的并集中的元素并保存到⽬标 set 中。
语法:SUNIONSTORE destination key [key ...]
返回值:并集的元素个数。

8.Redis-set_第12张图片

sdiff 差集

作用:获取给定 set 的差集中的元素。
语法:SDIFF key [key ...]
8.Redis-set_第13张图片

sdiffstore

作用:获取给定 set 的差集中的元素并保存到⽬标 set 中
语法:SDIFFSTORE destination key [key ...]
8.Redis-set_第14张图片

命令总结

命令 时间复杂度
sadd key element [element …] O(k),k是元素个数
srem key element [element …] O(k),k是元素个数
scard key O(1)
sismember key element O(1)
srandmember key [count] O(n),n 是 count
spop key [count] O(n),n 是 count
smembers key O(k), k 是元素个数
sinter key [key …] sitnerstore O(m * k)
sunion key [key …] sunionstore O(k),k 是多个集合的元素个数总和
sdiff key [key …] sdiffstore O(k),k 是多个集合的元素个数总和

内部编码

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

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

intset是为了节省空间,做出的特定优化,只有当元素全为整数,并且元素个数不是很多的时候才会被优化菜intset。
8.Redis-set_第15张图片

应用场景

使用 set来保存用户的“标签”

集合类型比较典型的使⽤场景是标签(tag)。例如 A 用户对娱乐、体育板块比较感兴趣,B 用户 对历史、新闻比较感兴趣,这些兴趣点可以被抽象为标签。有了这些数据就可以得到喜欢同⼀个标签的⼈,以及用户的共同喜好的标签,这些数据对于增强用户体验和用户黏度都⾮常有帮助。 例如⼀个电⼦商务⽹站会对不同标签的用户做不同的产品推荐或者例如qq的好友推荐等。

你可能感兴趣的:(Redis,redis,数据库,缓存,set)