当前位置:首页 > 问答 > 正文

Redis集合 数据结构 体验 Redis 集合的简单强大,redis 的 set

🔥 Redis集合 | 体验Redis Set的简单与强大

场景引入
想象你正在开发一个社交App,需要快速记录用户的"点赞"列表,如果用MySQL,每次查询都要SELECT * FROM likes WHERE user_id=xxx,数据量大时简直慢到怀疑人生😫,这时候,Redis的Set(集合)闪亮登场✨——它能在毫秒级完成"用户A是否点赞过文章B"的判断,还能轻松搞定共同好友、抽奖去重等场景,今天就带你玩转这个数据结构!


Redis Set是什么?

Redis的Set是一个无序元素唯一的集合(自动去重!),底层用哈希表或整数数组实现,查询、添加、删除操作都是O(1)时间复杂度。

举个栗子🌰:

Redis集合 数据结构 体验 Redis 集合的简单强大,redis 的 set

# 添加用户u1的点赞文章  
SADD user:u1:likes 1001 1002 1003  
# 检查是否点赞过1001  
SISMEMBER user:u1:likes 1001  # 返回1(存在)  
# 随机移除一个元素(适合抽奖)  
SPOP user:u1:likes  

为什么说它强大?

超快成员检测 🚀

SISMEMBER判断元素是否存在,比数据库WHERE查询快100倍以上,适合实时场景。

集合运算秒杀

  • 共同好友SINTER user:A:friends user:B:friends
  • 推荐可能认识的人SDIFF user:A:friends user:B:friends
  • 合并标签SUNION tag:python tag:redis

去重神器 🧹

自动过滤重复值,比如统计UV(独立访客):

SADD page:2025:uv 192.168.1.1 192.168.1.2  
SCARD page:2025:uv  # 直接获取UV数  

实战技巧

📌 限制集合大小

大集合(如超过1万元素)可能占用较多内存,可用SMEMBERS分页查询:

# 分页获取元素  
SSCAN user:u1:likes 0 COUNT 10  

📌 随机元素黑科技

  • SRANDMEMBER:随机返回元素但不删除(适合抽奖展示)
  • SPOP:随机弹出元素(适合公平抽奖)

📌 小心性能陷阱!

避免频繁对超大集合使用SMEMBERS(会阻塞Redis),优先用SSCAN分批获取。

Redis集合 数据结构 体验 Redis 集合的简单强大,redis 的 set


Set vs 其他结构

场景 Set优势 替代方案
点赞/收藏去重 自动去重,快速查询 Hash/DB
共同好友 一行命令搞定交集 应用层代码计算
实时排行榜(非顺序) 快速添加/移除 ZSET(有序场景)

Redis Set用最简单的API(SADD/SISMEMBER/SINTER)解决了去重快速检索集合运算三大痛点,下次遇到"是否已存在"或"求交集/并集"的需求,别写复杂SQL了,一个Set甩过去!💥

ℹ️ 数据参考:Redis官方文档(2025-07),实测基于Redis 7.2+版本。

发表评论