Redis 集合 Set 类型详解及使用场景

· Redis笔记 Redis 缓存 数据结构 入门笔记 NoSQL · 4 阅读 · 约 3 分钟

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 可以简化代码逻辑并提升系统性能。