**Redis数据类型:set**
set集合类型也可以保存多个字符串元素,与列表不同的是,集合中不允许有重复元素并且集合中的元素是无序的。一个集合最多可以存储2^32-1个元素。
无序集合,自动去重,将数据放到set中就可去重,可以基于JVM的HashSet去重,如果系统部署在多台机器上,就可以用redis进行全局去重。可以基于set做交集,并集,差集的操作。如把2个人的粉丝列表弄一个交集,就能看到两个人的共同好友是谁。
**1.1、用户标签**
例如一个用户对篮球、足球感兴趣,另一个用户对橄榄球、乒乓球感兴趣,这些兴趣点就是一个标签。有了这些数据就可以得到喜欢同一个标签的人,以及用户的共同感兴趣的标签。给用户打标签的时候需要①给用户打标签,②给标签加用户,需要给这两个操作增加事务。
给用户打标签
```bash
sadd user:1:tags tag1 tag2
```
给标签添加用户
```bash
sadd tag1:users user:1
```
```bash
sadd tag2:users user:1
```
使用交集(sinter)求两个user的共同标签
```bash
sinter user:1:tags user:2:tags
```
标签的常见场景还包括,将文章或商品的标签存储在 Redis 的 Set 类型中,然后可以通过 SADD 和 SREM 命令添加或删除标签,通过 SMEMBERS 命令获取所有标签,通过 SINTER 命令获取包含多个标签的文章或商品,从而实现标签系统的功能。
**1.2、抽奖功能**
集合有两个命令支持获取随机数,分别是:
随机获取count个元素,集合元素个数不变
```bash
srandmember key [count]
```
随机弹出count个元素,元素从集合弹出,集合元素个数改变
```bash
spop key [count]
```
用户点击抽奖按钮,参数抽奖,将用户编号放入集合,然后抽奖,分别抽一等奖、二等奖,如果已经抽中一等奖的用户不能参数抽二等奖则使用spop,反之使用srandmember。
**1.3、好友关系**
可以将用户的好友 ID 存储在 Redis 的 Set 类型中,然后可以通过 SADD 和 SREM 命令添加或删除好友关系,通过 SISMEMBER 命令判断两个用户是否为好友关系,从而实现好友关系的功能。
**1.4、排重功能**
可以将用户的 IP 地址或 ID 存储在 Redis 的 Set 类型中,然后可以通过 SADD 命令添加新的 IP 地址或 ID,通过 SISMEMBER 命令判断 IP 地址或 ID 是否已经存在,从而实现排重系统的功能。
**1.5、投票功能**
可以将用户的 ID 存储在 Redis 的 Set 类型中,然后可以通过 SADD 命令将用户的 ID 添加到投票列表中,通过 SCARD 命令获取投票列表的长度,从而实现投票系统的功能。
- Redis介绍
- String类型的应用场景
- Hash类型的应用场景
- List类型应用场景
- Set类型应用场景
- Zset类型应用场景
- Redis官网
- 安装Redis
- Redis配置文件详解
- 配置Redis开机启动
- Redis的命令行工具
- Redis的可视化管理软件
- 各开发语言对应的Redis库
- Server管理命令
- 通用命令
- String类型命令
- HASH类型命令
- LIST类型命令
- Set类型命令
- Sorted_Set类型命令
- ThinkPHP集成Redis
- SpringBoot集成Redis
- 实战篇:优惠券功能概述
- 实战篇:表单页面实现
- 实战篇:后端处理逻辑
- 实战篇:优惠券类逻辑
- 实战篇:优惠券列表
- 原理篇:Redis缓存雪崩
- 原理篇:Redis缓存击穿
- 原理篇:Redis缓存穿透
- 进阶篇:Redis的事务与持久化
- 进阶篇:Redis集群
- 进阶篇:Redis的发布订阅模式
- 进阶篇:Redis分布式锁
- 进阶篇:Redis分布式缓存
- 进阶篇:一致性哈希
- 进阶篇:Redis安全管理
- 进阶篇:Redis性能优化