上一篇
"小王啊,咱们的Redis响应怎么越来越慢了?" 一大早,技术总监就皱着眉头找上门来,我打开Redis一看,好家伙,800多万个键里至少有三分之一是早已过期的测试数据和废弃缓存,活像个塞满杂物的储物间,这种情况你是不是也遇到过?
# 先找出所有匹配的键(生产环境慎用KEYS命令!) redis-cli KEYS "user:session:*" > sessions.txt # 使用xargs批量删除(每次删除1000个防阻塞) cat sessions.txt | xargs -L 1000 redis-cli DEL
注意:KEYS命令会阻塞Redis,百万级键库可能导致服务卡顿,建议在低峰期操作,或者改用SCAN...
# 使用SCAN迭代查询(不阻塞服务) redis-cli --scan --pattern "temp:cache:*" | while read key do redis-cli DEL "$key" echo "已删除: $key" done
更高效的做法是使用管道:
redis-cli --scan --pattern "order:tmp:*" | xargs -L 500 redis-cli DEL
-- delete_keys.lua local pattern = ARGV[1] local batch_size = 1000 local cursor = "0" local deleted = 0 repeat local reply = redis.call("SCAN", cursor, "MATCH", pattern, "COUNT", batch_size) cursor = reply[1] local keys = reply[2] if #keys > 0 then redis.call("DEL", unpack(keys)) deleted = deleted + #keys end until cursor == "0" return deleted
执行脚本:
redis-cli --eval delete_keys.lua , "cart:expired:*"
redis-cli SAVE
备份数据redis-cli INFO memory
观察变化业务:类型:ID
的层级结构,方便管理与其事后清理,不如从源头控制:
# 设置键时直接添加TTL redis-cli SETEX "promo:2025summer" 86400 "sale_info" # 或者使用过期时间戳 redis-cli HSET "user:1001" "session" "token123" EXPIREAT 1754006400
记得上个月我们清理了420万无效键后,Redis内存占用从14GB直降到5.8GB,QPS提升了近3倍,定期给Redis做"大扫除",就像定期整理你的办公桌一样,能让整个系统保持清爽高效,下次遇到Redis变慢时,不妨先看看是不是该清理无用键了!
本文由 冼彦 于2025-08-02发表在【云服务器提供商】,文中图片由(冼彦)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/518456.html
发表评论