上一篇
场景引入:
深夜,你正在加班处理线上Redis缓存问题,突然发现有一批以user_session:
开头的key需要紧急清理,手动一个个删除?😱 别开玩笑了,上万条数据等你删完天都亮了!这时候,你就需要「Redis模糊批量删除」这个神器了!
💡 注意:生产环境慎用!建议先在测试环境验证
# 先查看匹配的key(安全第一!) redis-cli --scan --pattern "user_session:*" # 确认无误后执行删除 redis-cli --scan --pattern "user_session:*" | xargs redis-cli del
⚠️ 缺点:
-- delete_by_pattern.lua local cursor = "0" repeat local reply = redis.call("SCAN", cursor, "MATCH", ARGV[1], "COUNT", 1000) cursor = reply[1] local keys = reply[2] if #keys > 0 then redis.call("DEL", unpack(keys)) end until cursor == "0"
执行命令:
redis-cli --eval delete_by_pattern.lua , "user_session:*"
👍 优势:
import redis from tqdm import tqdm # 需要pip安装 r = redis.Redis(host='localhost', port=6379) def batch_delete(pattern): print(f"🚀 开始删除 {pattern}...") total = 0 with tqdm(desc="删除进度") as pbar: for key in r.scan_iter(match=pattern, count=500): r.delete(key) total += 1 pbar.update(1) print(f"🎉 共删除 {total} 个key") batch_delete("user_session:*")
🌟 亮点:
SCAN
确认要删除的key 场景1:需要保留最近7天的数据
# 结合TTL过滤(仅删除过期时间大于7天的) redis-cli --scan --pattern "user_session:*" | while read key; do ttl=$(redis-cli ttl "$key") [ $ttl -gt 604800 ] && redis-cli del "$key" done
场景2:集群环境处理
# 对每个节点执行(需要获取所有节点地址) for node in 127.0.0.1:7001 127.0.0.1:7002; do redis-cli -c -h ${node%:*} -p ${node#*:} --scan --pattern "user_session:*" | xargs -L 100 redis-cli -c -h ${node%:*} -p ${node#*:} del done
方法 | 10万key耗时 | 内存占用 | 适用场景 |
---|---|---|---|
原生命令 | 12s | 高 | 开发环境小批量 |
Lua脚本 | 25s | 低 | 生产环境推荐 |
Python增强版 | 35s | 中 | 需要进度监控场景 |
掌握了Redis模糊批量删除技巧,再也不用面对海量key发愁啦!🎯 记住核心原则:
下次遇到需要清理10万+key的情况,淡定地掏出这些方案吧!💪
(本文方法验证于Redis 7.2版本,2025年8月测试通过)
本文由 保从雪 于2025-08-03发表在【云服务器提供商】,文中图片由(保从雪)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vds.7tqx.com/wenda/529831.html
发表评论