场景引入:
凌晨3点,你正盯着屏幕处理千万级用户订单数据,突然老板发消息:“立刻查一下用户ID为U_8848的最后三笔交易记录!” 😱 这时候如果还在用keys *
慢慢扫描,怕是天亮都交不了差… 别慌!这份Redis数据查询指南就是你的深夜救星!
适用场景:明确知道完整key或字段时
# 字符串类型(如缓存用户token) 127.0.0.1:6379> GET user:U_8848:token # 哈希类型(如用户资料) 127.0.0.1:6379> HGET user:U_8848 profile
💡 性能提示:O(1)时间复杂度,就像快递员直接按门牌号送货一样快!
当你不记得完整key时:
# 安全遍历所有以"order:U_8848"开头的key(避免阻塞生产环境) 127.0.0.1:6379> SCAN 0 MATCH "order:U_8848*" COUNT 100
⚠️ 避坑指南:
KEYS *
会阻塞整个Redis服务,就像在超市收银台突然要求盘点所有库存 查询JSON文档中的嵌套字段:
0.0.1:6379> JSON.GET order:20250701 '$[?(@.user_id=="U_8848")]'
🌟 适用场景:
1 字符串计数器
0.0.1:6379> INCR user:U_8848:login_count 127.0.0.1:6379> GET user:U_8848:login_count
2 集合去重统计
# 记录用户访问过的商品 127.0.0.1:6379> SADD user:U_8848:viewed_items P_10086 127.0.0.1:6379> SCARD user:U_8848:viewed_items
3 HyperLogLog估算
# 统计UV(允许误差约0.8%) 127.0.0.1:6379> PFADD daily_uv 192.168.1.1 192.168.1.2 127.0.0.1:6379> PFCOUNT daily_uv
原子化复杂查询:
-- 查询用户最近3笔订单总金额 local orders = redis.call('LRANGE', 'user:U_8848:orders', 0, 2) local sum = 0 for _, order_id in ipairs(orders) do sum = sum + tonumber(redis.call('HGET', 'orders:'..order_id, 'amount')) end return sum
🚀 优势:
1️⃣ 热键警告:对频繁查询的key使用redis-cli --hotkeys
检测
2️⃣ 内存布局:超过10KB的value考虑分片存储
3️⃣ 查询耗时:用SLOWLOG GET 10
分析慢查询
深夜加餐小技巧:
当需要查询历史记录时,可以结合TTL设置自动过期:
# 记录用户最后一次操作,7天后自动消失 127.0.0.1:6379> SETEX user:U_8848:last_active 604800 "2025-07-20T03:14:00"
在Redis的世界里,没有找不到的数据,只有还没用对的命令! 🎯 下次老板突袭查询时,淡定敲键盘的样子绝对帅到飞起~
本文由 藩雁菱 于2025-07-29发表在【云服务器提供商】,文中图片由(藩雁菱)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/472336.html
发表评论