**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性能優化