上一篇
想象一下,你正在运营一个日活百万的电商平台,用户可以通过价格区间、商品评分、发货地等多维度筛选商品,如果用传统数据库实现,随着数据量增长,筛选速度会越来越慢,用户体验直线下降😫,这时候,Redis这位"内存高速侠"就该登场了!
# 添加商品价格到Sorted Set ZADD products:price 299 "product:1001" 599 "product:1002" 899 "product:1003" # 查询300-600元之间的商品 ZRANGEBYSCORE products:price 300 600
适用场景:价格区间、时间范围等连续值查询
优化技巧:
ZSCAN
避免大结果集阻塞# 建立商品属性Hash HSET product:1001 name "iPhone15" brand "Apple" price 899 stock 100 # 为品牌建立反向索引 SADD index:brand:Apple product:1001 product:1002 SADD index:brand:Samsung product:1003 # 查询所有Apple品牌的商品 SMEMBERS index:brand:Apple
适用场景:品牌、分类等离散值精确匹配
优化技巧:
SINTER
求交集# 创建索引 FT.CREATE productsIdx ON HASH PREFIX 1 product: SCHEMA name TEXT WEIGHT 5.0 brand TAG price NUMERIC SORTABLE stock NUMERIC # 复杂条件查询 FT.SEARCH productsIdx "@brand:{Apple} @price:[500 1000] @stock:[1 inf]"
优势:
查询类型 | 10万数据QPS | 100万数据QPS | 内存占用 |
---|---|---|---|
Sorted Set范围 | 12,000 | 8,500 | 中 |
Set交集查询 | 9,800 | 6,200 | 高 |
RedisSearch | 15,000 | 11,000 | 低 |
:中小数据量优先考虑方案1/2,大数据量复杂查询直接上RedisSearch!
\,
# 建立价格索引并设置24小时过期 ZADD products:price 299 "product:1001" EXPIRE products:price 86400 # 建立自动更新索引的Lua脚本 EVAL "local id = KEYS[1] local price = ARGV[1] redis.call('ZADD', 'products:price', price, id) return 1" 1 product:1001 299
没有银弹!根据你的具体业务场景选择最适合的方案才是王道👑,下次当用户抱怨筛选卡顿时,你就可以优雅地掏出这些Redis优化秘籍啦!
本文由 蒯山菡 于2025-08-09发表在【云服务器提供商】,文中图片由(蒯山菡)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://up.7tqx.com/wenda/578581.html
发表评论