Redis 集合 Set 概述
Set 是 Redis 提供的一种无序且不重复的集合类型。与 List 不同,Set 中的元素不会重复,且不保证顺序。 其底层实现主要依赖于哈希表或整数集合,因此对于元素的添加、删除和查找操作具有极高的效率。
常用命令
Set 的操作命令丰富,以下是一些常用的命令及其语法:
| 命令 | 描述 |
|---|---|
| SADD key member [member ...] | 向集合添加一个或多个成员 |
| SREM key member [member ...] | 移除集合中一个或多个成员 |
| SMEMBERS key | 返回集合中的所有成员 |
| SISMEMBER key member | 判断 member 元素是否是集合 key 的成员 |
| SPOP key [count] | 移除并返回集合中的一个或多个随机元素 |
| SINTER key [key ...] | 返回给定所有集合的交集 |
| SUNION key [key ...] | 返回给定所有集合的并集 |
| SDIFF key [key ...] | 返回给定所有集合的差集 |
示例操作:
# 添加成员
127.0.0.1:6379> SADD my_set "apple" "banana" "cherry"
(integer) 3
# 查看所有成员
127.0.0.1:6379> SMEMBERS my_set
1) "banana"
2) "apple"
3) "cherry"
# 判断是否存在
127.0.0.1:6379> SISMEMBER my_set "apple"
(integer) 1
使用场景
Set 的独特特性使其在多种业务场景中非常有用:
1. 标签系统
为用户或文章打标签时,可以使用 Set 存储标签 ID。由于 Set 自动去重,可以避免重复打标签。
SADD article:1001:tags "java" "redis" "nosql"
2. 点赞功能
利用 Set 的唯一性,可以存储点赞用户的 ID,防止重复点赞。
SADD post:2002:likes "user_1" "user_2"
3. 共同好友 / 共同关注
通过求两个用户关注列表的交集,可以快速找出共同关注的人。
SINTER user:1:follows user:2:follows
4. 随机抽奖
使用 SPOP 命令可以随机抽取参与用户,实现抽奖功能。
SPOP lottery:users 1
总结
Redis 的 Set 类型凭借其无序、去重和高效的集合运算能力,非常适合处理标签、点赞、好友关系等需要集合操作的业务逻辑。合理利用 Set 可以简化代码逻辑并提升系统性能。