上一篇
场景引入:
凌晨3点,你正喝着第5杯咖啡☕,突然收到报警——线上服务响应超时!排查发现Redis中有上百万个Key,但急需找出所有以user:session:
开头的会话数据,这时候,KEYS *
一敲...完了,Redis直接卡死!😱 别慌,今天我们就来彻底解决这个痛点,教你如何安全高效地检索Redis数据!
KEYS
命令?# 危险操作!生产环境慎用! KEYS *
这个命令会阻塞Redis单线程,如果Key数量超过10万,可能导致服务短暂不可用!🚨
替代方案:
✅ 使用SCAN
命令(非阻塞、增量式遍历)
✅ 配合TYPE
/TTL
等命令筛选
SCAN
——安全的游标遍历# 迭代式查找,每次返回少量Key SCAN 0 MATCH "user:session:*" COUNT 100
0
:起始游标(0表示从头开始) MATCH
:模糊匹配模式(支持和通配符) COUNT
:建议返回数量(实际可能更多/更少) 0
TYPE
+SCAN
组合——按类型过滤# 只查找String类型的Key SCAN 0 MATCH "order:*" TYPE string
支持的类型:string
/list
/hash
/set
/zset
TTL
+SCAN
——找出即将过期的Key# 查询剩余TTL≤3600秒的Key SCAN 0 MATCH "cache:*" COUNT 50 | xargs -L 1 redis-cli TTL
RANDOMKEY
# 随机返回一个Key(适合抽样检查) RANDOMKEY
-- 查找并删除所有匹配的Key(原子操作) local keys = redis.call('SCAN', 0, 'MATCH', 'temp:*') for i, key in ipairs(keys[2]) do redis.call('DEL', key) end
命令 | 10万Key耗时 | 是否阻塞 |
---|---|---|
KEYS * |
2秒 | ❌ 是 |
SCAN 分10次 |
3秒 | ✅ 否 |
KEYS
:在redis.conf
中添加rename-command KEYS ""
COUNT
值建议设为100~1000 region:user:123
) redis-cli --bigkeys
定期分析Key分布 本文由 温初 于2025-07-31发表在【云服务器提供商】,文中图片由(温初)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/498492.html
发表评论