doc: 阅读redis sets文档

This commit is contained in:
asahi
2025-09-06 16:21:49 +08:00
parent a9057466a8
commit 8e4fca612a

View File

@@ -56,6 +56,15 @@
- [Blocking operations on lists](#blocking-operations-on-lists) - [Blocking operations on lists](#blocking-operations-on-lists)
- [BRPOP](#brpop) - [BRPOP](#brpop)
- [Automatic Creation and removal of keys](#automatic-creation-and-removal-of-keys) - [Automatic Creation and removal of keys](#automatic-creation-and-removal-of-keys)
- [redis sets](#redis-sets)
- [basic commands](#basic-commands)
- [SADD](#sadd)
- [SMEMBERS](#smembers)
- [SDIFF](#sdiff)
- [SINTER](#sinter)
- [SREM](#srem)
- [SPOP](#spop)
- [SRANDMEMBER](#srandmember)
# redis # redis
@@ -851,3 +860,93 @@ client 2> rpush event-queue:2 baka
> LPOP bikes:repairs > LPOP bikes:repairs
(nil) (nil)
``` ```
### redis sets
redis set是一个unordered collection of unique strings通过redis sets可以高效进行如下操作
- track unique items
- represent relations
- perform common set operations such as intersection, unions, and differences
#### basic commands
- `SADD`: 向set中添加new member
- `SREM`: 从set中移除指定member
- `SISMEMBER`: 检查给定的string是否位于set中
- `SINTER`: 返回两个或更多set的交集
- `SCARD`: 返回set的大小cardinality
#### SADD
`SADD`命令会向set中添加新的元素示例如下
```redis-cli
> SADD bikes:racing:france bike:1 bike:2 bike:3
(integer) 3
> SMEMBERS bikes:racing:france
1) bike:3
2) bike:1
3) bike:2
```
#### SMEMBERS
在上述示例中,`SMEMBERS`命令会返回set中所有的元素。`redis`并不保证元素的返回顺序,每次调用`SMEMBERS`命令都可能以任何顺序返回set中的元素。
#### SDIFF
可以通过SDIFF来返回两个sets的差异差集。例如可以通过`SDIFF`命令查看有哪些元素位于`set1`中但是不位于`set2`中,示例如下:
```redis-cli
> SADD bikes:racing:usa bike:1 bike:4
(integer) 2
> SDIFF bikes:racing:france bikes:racing:usa
1) "bike:3"
2) "bike:2"
```
上述示例中,则通过`SDIFF`命令展示了`bikes:racing:france`和`bikes:racing:usa`两个set的差集。
SDIFF命令在`difference between all sets is empty`时会返回一个empty array。
#### SINTER
可以通过SINTER命令来取多个sets的交集。
```redis-cli
> SADD bikes:racing:france bike:1 bike:2 bike:3
(integer) 3
> SADD bikes:racing:usa bike:1 bike:4
(integer) 2
> SADD bikes:racing:italy bike:1 bike:2 bike:3 bike:4
(integer) 4
> SINTER bikes:racing:france bikes:racing:usa bikes:racing:italy
1) "bike:1"
> SUNION bikes:racing:france bikes:racing:usa bikes:racing:italy
1) "bike:2"
2) "bike:1"
3) "bike:4"
4) "bike:3"
> SDIFF bikes:racing:france bikes:racing:usa bikes:racing:italy
(empty array)
> SDIFF bikes:racing:france bikes:racing:usa
1) "bike:3"
2) "bike:2"
> SDIFF bikes:racing:usa bikes:racing:france
1) "bike:4"
```
#### SREM
可以通过`SREM`命令来移除set中的元素可以一次性移除一个或多个。
#### SPOP
`SPOP`命令支持随机移除一个element。
#### SRANDMEMBER
`SRANDMEMBER`命令支持随机返回一个set中的元素但是不对其实际移除
上述命令的使用示例如下所示:
```redis-cli
> SADD bikes:racing:france bike:1 bike:2 bike:3 bike:4 bike:5
(integer) 5
> SREM bikes:racing:france bike:1
(integer) 1
> SPOP bikes:racing:france
"bike:3"
> SMEMBERS bikes:racing:france
1) "bike:2"
2) "bike:4"
3) "bike:5"
> SRANDMEMBER bikes:racing:france
"bike:2"
```