上一篇
场景引入:
凌晨3点,你的电商平台突然涌入10万用户抢购限量球鞋 🚀,Redis原本稳稳的查询性能突然卡成PPT——用户投诉“加入购物车要等5秒!” 这时候才发现:没有索引的集合查询,就像在图书馆乱序的书堆里找一本《哈利波特》📚…
别慌!今天教你用Redis集合值索引优化,让查询速度原地起飞 ✈️
Redis的集合(Set)虽然能存储唯一值,但直接查询特定元素时:
# 传统方式:O(N)时间复杂度
SISMEMBER big_set "target_value"
当集合有100万成员时,每次查询都要全量扫描!💥
索引的核心思想:用空间换时间,提前建立“值→集合”的映射关系。
原理:用Hash存储“值→所属集合”的关系
# 商品颜色索引案例 # 原始数据 SADD shoes:red "AJ1" "YEEZY_350" SADD shoes:blue "DUNK_LOW" "AJ4" # 建立索引 HSET color_index "AJ1" "red" HSET color_index "YEEZY_350" "red" HSET color_index "DUNK_LOW" "blue" # 查询AJ1的颜色(O(1)时间复杂度!) HGET color_index "AJ1" # 返回"red"
# 电商商品多维度查询 # 建立品牌+颜色的联合索引 SADD index:nike:red "AJ1" "AIR_FORCE" SADD index:adidas:blue "STAN_SMITH" # 查询所有红色耐克鞋 SMEMBERS index:nike:red
# 游戏玩家排行榜案例 ZADD player_scores 1000 "user_123" ZADD player_scores 800 "user_456" # 快速获取TOP10(O(log N)时间复杂度) ZREVRANGE player_scores 0 9
查询方式 | 10万数据耗时 | 100万数据耗时 |
---|---|---|
无索引SISMEMBER | 12ms | 125ms |
Hash索引 | 3ms | 3ms |
ZSET索引 | 2ms | 5ms |
💡 :索引后查询速度提升40-400倍!
MEMORY USAGE
命令监控 redis.conf
的activerehashing
优化 某社交App用集合存储用户好友,原始查询要8ms:
SISMEMBER user:123:friends "user_456"
优化后:
# 建立双向索引
SADD user:123:friends "user_456"
SADD user:456:friends "user_123"
# 增加反向查询Hash
HSET friend_index "123_456" 1
最终查询降至2ms,并发能力提升20倍! 🎉
最后的小技巧:用SCAN
代替KEYS
遍历索引,避免阻塞Redis服务,下次遇到大数据量查询卡顿,试试给你的Redis加个“目录”吧! 📚→🔍
本文由 藩雁菱 于2025-08-01发表在【云服务器提供商】,文中图片由(藩雁菱)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/502392.html
发表评论