Redis批量删除Key的三种高效方法
方法一:使用通配符匹配删除
通过KEYS
命令配合通配符筛选键值,再传递给DEL
命令批量删除:
redis-cli KEYS "user:*" | xargs redis-cli DEL
注意:当键数量超过10^4时,建议分批处理。使用SCAN
替代KEYS
可避免阻塞:
redis-cli --scan --pattern "cache:*" | xargs -L 1000 redis-cli DEL
方法二:Lua脚本原子操作
通过执行Lua脚本实现原子化批量删除(Redis 2.6+支持):
local keys = redis.call('KEYS', ARGV[1])
for i=1,#keys,5000 do
redis.call('DEL', unpack(keys, i, math.min(i+4999, #keys)))
end
return #keys
执行命令:
redis-cli EVAL "$(cat delkeys.lua)" 0 "order_*"
方法三:管道批量处理
利用redis-cli管道特性实现高效删除:
redis-cli --scan --pattern "temp_*" | \
awk '{print "DEL "$0}' | \
redis-cli --pipe
方案对比与选型建议
方式 | 适用场景 | 风险控制 | 性能影响 |
---|---|---|---|
KEYS+DEL | 测试环境、小数据量 | 低 | 高 |
SCAN+DEL | 生产环境、大数据量 | 高 | 中 |
Lua脚本 | 需要原子性、复杂逻辑 | 中 | 低 |
注意事项:
- 所有删除操作不可逆,建议先备份数据
- 复杂匹配模式建议用
SCAN
替代KEYS
- 超大数据量可拆分多次执行,避免内存溢出