Redis核心数据结构 - set
常用操作
SADD key member [member ...] // 往集合key存入元素,若已存在则会略
SREM key member [member ...] // 从集合key中删除元素
SMEMBERS key // 获取集合key中所有元素
SCARD key // 获取集合key中所有元素
SISMEMBER key member // 判断member元素是否存在于集合key中
SRANDMEMBER key [count] // 从集合key中选出count个元素,元素不从key中删除
SPOP key [count] // 从集合key中选出count个元素,元素从key中删除
运算操作
SINTER key [key ...] // 交集运算
SINTERSTORE destination key [key ...] emsp; // 将交集结果存入新集合destination中
SUNION key [key ...] // 并集运算
SUNIONSTORE destination key [key ...] emsp; // 将并集结果存入新集合destination中
SDIFF key [key ...] // 差集运算
SDIFFSTORE destination key [key ...] emsp; // 将差集结果存入新集合destination中
应用场景
-
单次抽奖小程序
1). 点击参与抽奖加入集合
SADD key {userID}
2). 查看参与抽奖所有用户
SMEMBERS key
3). 抽取3个中奖用户
SRANDMEMBER key 3 / SPOP key 3 -
分几等奖多次抽奖
1). 点击参与抽奖加入集合
SADD key {userID}
2). 查看参与抽奖所有用户
SMEMBERS key
3). 抽取3个三等奖
SPOP key 3
4). 抽取2个二等奖
SPOP key 2
5). 抽取1个一等奖
SPOP key 1 -
微信微博点赞,收藏,标签
- 点赞
SADD like:{消息ID} {用户ID} - 取消点赞
SREM like:{消息ID} {用户ID} - 检查用户是否点过赞
SISMEMBER like:{消息ID} {用户ID} - 获取点赞的用户列表
SMEMBERS like:{消息ID} - 获取点赞用户数
SCARD like:{消息ID}
- 微信微博关注模型
- kyo关注的人:
kyoFocus -> {joe, smith, wallace} - joe关注的人:
joeFocus -> {kyo, smith, haha} - smith关注的人:
smithFocus ->{kyo, joe, haha, wallace} - kyo和joe共同关注:
SINTER kyoFocus joeFocus -> {smith} - kyo关注的人也关注joe:
SISMEMBER smithFocus joe
SISMEMBER wallaceFocus joe - kyo可能认识的人:
SDIFF joeFocus kyoFocus ->{kyo, haha}
- 商品,电影等推荐系统
- kyo看过的电影id:
kyoMovie -> {m1,m2,m3} - kyo朋友joe看过的电影id:
joeMovie -> {m3,m4,m5,m6} - 把joe看过kyo没看过的电影推荐给kyo:
sdiff joeMovie kyoMovie -> {m4,m5,m6}