Redis的set类型核心知识

不会说全部api,api这东西想用自己help @set就行了。

一、特点

set类型无序不可重复

二、核心api

基础数据的准备

sadd s1 a b c d
sadd s2 c d e f

1、交集

1.1、sinter

1.1.1、概念

语法:SINTER key1 key2 ...,将key1,key2…中相同的元素返回。

1.1.2、演示

在这里插入图片描述

1.2、sinterstore

1.2.1、概念

语法:SINTERSTORE destination key1 [key2 ...],将key1 key2…中相同的元素都放到destination中,与SINTER的区别是SINTER会返回,而SINTERSTORE会将交集结果放入新的key中。

1.2.2、演示

在这里插入图片描述

1.3、应用场景

互相关注、共同好友

2、并集

SUNION、SUNIONSTORE

3、差集

SDIFF、SDIFFSTORE
差集这里额外说下:SDIFF s1 s2的话是以s1为基础找到再s2里没有的,所以取决于s1和s2的线后顺序。
在这里插入图片描述

4、随机返回

4.1、概念

srandmember key count(正、负、0

正数:取出一个去重的结果集,但是不能超过已有结果集数量
负数:取出一个带重复的结果集,但是一定满足你要的数量,比如-5,一定会给你返回5条,但是会重复
0:不返回

4.2、演示

在这里插入图片描述

5、随机弹出

5.1、概念

语法:SPOP key [count],随机从key里弹出count个元素。只支持大于等于0的数。
对比上面的SRANDMEMBER来讲区别在于,上面的只会返回,但返回的元素还在原set集合中。而spop是从原集合中弹出且返回。

5.2、演示

在这里插入图片描述

三、业务实战

1、互相关注、共同好友

采取交集SINTER/SINTERSTORE

2、抽奖

2.1、第一种规则

假设10个奖品,用户可能小于10,也可能大于10,用户终奖又分为重复和不重复。再比如微博要给粉丝送三件礼物,分给谁是随机的。你可以设置每个人不能重复中奖,也可以设置每个人能重复中将。
所以你会有一个粉丝列表,就比如上面的k1,如果我要随机抽出三名不重复的粉丝

srandmember k1 3

如果要随机抽出3名可以重的粉丝

srandmember k1 -3(人很多的话可能要多试几次才会出现重复)

2.2、第二种规则

上面srandmember每次都会随机抽出N个成员,但是每次抽都是从原有数据里拿的,抽2次可能是同一批人。有这样一个需求,年会一个人一个人的抽,抽完一个人后就不能再中奖了。那么就需要spop

# 一个一个人抽
spop k1  会从k1里弹出一个成员。
# count个人一起抽
spop k1 count  会从k1里取出count个成员。

四、总结

  • 特点
  • 核心api(不全,自己help)
  • 实战案例
发布了32 篇原创文章 · 获赞 33 · 访问量 8756

猜你喜欢

转载自blog.csdn.net/ctwctw/article/details/105046466