上一篇
凌晨12点整,某电商平台新款球鞋开抢,3秒内10万请求涌入——为什么库存能精准扣减不超卖?为什么你的购物车能实时同步不同设备?这背后正是Redis在高速运转,作为开发者,掌握Redis查询就像拿到了高性能系统的钥匙,本文将带你从零开始,用最接地气的方式玩转Redis查询。
# 查单个键(存在返回value,不存在返回nil) 127.0.0.1:6379> GET user:1001 "{\"name\":\"张三\",\"vip\":true}" # 批量查键(避免网络往返开销) 127.0.0.1:6379> MGET user:1001 user:1002 1) "{\"name\":\"张三\",\"vip\":true}" 2) (nil) # 模糊搜索键(小心生产环境大Key) 127.0.0.1:6379> KEYS order:2025-08-* 1) "order:2025-08-15-1001" 2) "order:2025-08-16-1002"
实用技巧:
KEYS *
,用SCAN 0 COUNT 100
分批次扫描 TYPE key
先确认数据类型,避免直接GET二进制数据 适合存储用户资料、商品属性等结构化数据:
# 查整个哈希表 127.0.0.1:6379> HGETALL product:101 1) "name" 2) "限量版球鞋" 3) "stock" 4) "50" 5) "price" 6) "999" # 查单个字段 127.0.0.1:6379> HGET product:101 stock "50" # 查多个字段(比多次HGET更高效) 127.0.0.1:6379> HMGET product:101 name price 1) "限量版球鞋" 2) "999"
实现实时排行榜、延迟队列:
# 查TOP3玩家 127.0.0.1:6379> ZREVRANGE leaderboard 0 2 WITHSCORES 1) "player_zhang" 2) "9850" 3) "player_li" 4) "9320" 5) "player_wang" 6) "9015" # 查某玩家排名(从0开始) 127.0.0.1:6379> ZREVRANK leaderboard player_li (integer) 1 # 第二名
当需要连续执行多个命令时,使用管道减少网络延迟:
# 不使用管道(多次往返) GET config:timeout GET config:retry GET config:max_conn # 使用管道(一次往返) echo -e "GET config:timeout\nGET config:retry\nGET config:max_conn" | redis-cli --pipe
实现库存检查+扣减的原子操作:
-- 检查并扣减库存脚本 local stock = tonumber(redis.call('HGET', KEYS[1], 'stock')) if stock >= tonumber(ARGV[1]) then redis.call('HINCRBY', KEYS[1], 'stock', -ARGV[1]) return 1 -- 成功 else return 0 -- 库存不足 end
执行方式:
redis-cli --eval decr_stock.lua product:101 , 1
发现性能瓶颈的关键:
# 查看最近慢查询(单位微秒) 127.0.0.1:6379> SLOWLOG GET 5 1) 1) (integer) 14 # 日志ID 2) (integer) 1725123456 # 时间戳 3) (integer) 12000 # 耗时12ms 4) 1) "KEYS" # 命令 2) "temp_*"
优化建议:
CONFIG SET slowlog-log-slower-than 5000
(5ms) SLOWLOG RESET
大Key查询:
HSCAN
/SSCAN
分批获取 HSCAN huge_hash 0 COUNT 50
热Key问题:
redis-cli --hotkeys
找出热点Key 集群环境注意:
{tag}
确保数据在同一节点 CLUSTER KEYSLOT "{user1001}"
计算槽位 在4核8G服务器上测试(基于Redis 7.2):
查询方式 | 10万次查询耗时 | QPS |
---|---|---|
单条GET | 8秒 | 7,812 |
管道化GET | 4秒 | 71,428 |
Lua脚本批量查询 | 9秒 | 111,111 |
Redis查询就像与一位极速的对话者交流——当你用对方式(比如管道批量操作),它能以惊人的速度回应;但若粗暴地使用KEYS *
这样的全盘扫描,就等于让这位短跑健将去扛沙袋,每个查询都应该是精确的狙击,而非盲目的扫射,打开你的redis-cli开始实践吧!
(注:本文命令测试基于Redis 7.2版本,2025年8月验证通过)
本文由 雀云岚 于2025-08-05发表在【云服务器提供商】,文中图片由(雀云岚)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/541015.html
发表评论