Redis数据结构之SET类型

93 阅读2分钟

SET常用操作

SADD key member [member...]  往集合key中存入元素,元素存在则忽略,若key不存在则新建

SREM key member [member...]  删除集合key中元素
SMEMBERS key                 获取集合key中所有元素
SCARD  key                   获取集合key的元素个数
SISMEMBER key member         判断member元素是否存在于集合key中
SRANDMEMBER key [count]      从集合中选出count个元素,元素不从key中删除
SPOP key [count]             从集合中先出count个元素,元素从key中删除

SET运算操作

SINTER key [key...]                         交集运算
SINTERSTORE destination key [key...]        将交集运算结果存入新的集合destination中
SUNION key [key...]                         并集运算
SUNIONSTORE destionation key [key...]       将并集结果存入新的集合destionation中
SDIFF key [key...]                          差集运算
SDIFFSTORE destionation key [key...]        将差集运算结果存入新集合destionation中

应用场景

  • 微信抽奖小程序
1) 点击参与抽奖加入集合
SADD key {USER:ID}
2) 查看所有抽奖用户
SMEMBERS key
3) 抽取count名中奖者
SRANDMEMBER key [count]   //可以重复抽  
SPOP key [count]          //不可以重复抽
  • 微信微博点赞,收藏,标签
1) 点赞
SADD like:{消息ID} {用户ID}
2) 取消点赞
SREM like:{消息ID} {用户ID}
3) 检查用户是否点过赞
SISMEMBER like:{消息ID} {用户ID}
4)获取用户点击列表
SMEMBERS like:{消息ID}
5) 获取点赞用户数
SCARD like:{消息ID}
  • SET集合操作实现关注模型
1) A用户关注的人
ASet -> {c, d}
2) B用户关注的人
BSet -> {a, c ,d}
3) C用户关注的人
CSET -> {a,b,d,e,f}
4) AB共同关注的人
SINTER ASet BSet -> {c,d}
5) A关注的人也关注过当前用户currUser
//A关注的用户有c,d,只需要查找对应用户集合,中是否存在用户
SISMEMBER CSET currUser
SISMEMBER DSET currUser
6) A可能认识的人
//还需要移除掉a
SDIFF BSet Aset -> {a}   
SDIFF CSET ASET -> {a,b,e,f}
  • SET集合操作实现电商商品筛选
SADD brand:huawei p40
SADD brand:xianmi mi-10
SADD brand:iphone iphone12
SADD os:android p40 mi-10
SADD cpu:brand:intel p40 min-10
SADD ram:8G p40 mi-10 iphone12

筛选安卓系统,intel品牌cpu,内存8G的手机品牌有哪些

SINTER os:android cpu:brand:intel ram:8G -> {P40, min-40}