场景引入:
想象你正在开发一个社交App,需要快速记录用户的"点赞"列表,如果用MySQL,每次查询都要SELECT * FROM likes WHERE user_id=xxx
,数据量大时简直慢到怀疑人生😫,这时候,Redis的Set(集合)闪亮登场✨——它能在毫秒级完成"用户A是否点赞过文章B"的判断,还能轻松搞定共同好友、抽奖去重等场景,今天就带你玩转这个数据结构!
Redis的Set是一个无序且元素唯一的集合(自动去重!),底层用哈希表或整数数组实现,查询、添加、删除操作都是O(1)时间复杂度。
举个栗子🌰:
# 添加用户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
分批获取。
场景 | Set优势 | 替代方案 |
---|---|---|
点赞/收藏去重 | 自动去重,快速查询 | Hash/DB |
共同好友 | 一行命令搞定交集 | 应用层代码计算 |
实时排行榜(非顺序) | 快速添加/移除 | ZSET(有序场景) |
Redis Set用最简单的API(SADD
/SISMEMBER
/SINTER
)解决了去重、快速检索、集合运算三大痛点,下次遇到"是否已存在"或"求交集/并集"的需求,别写复杂SQL了,一个Set甩过去!💥
ℹ️ 数据参考:Redis官方文档(2025-07),实测基于Redis 7.2+版本。
本文由 邗水 于2025-07-30发表在【云服务器提供商】,文中图片由(邗水)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://up.7tqx.com/wenda/481214.html
发表评论