批量删除redis的keys - Fri, Apr 8, 2022
批量删除redis的keys
批量删除redis的keys
提示: Redis已发布7.x版本,带来了许多新特性。建议参考官方文档了解最新功能。
基本用法
# 删除匹配模式的所有keys
redis-cli KEYS "log_*" | xargs redis-cli DEL
# 指定数据库
redis-cli -n 0 KEYS "log_*" | xargs redis-cli -n 0 DEL
# 指定主机和端口
redis-cli -h 127.0.0.1 -p 6379 KEYS "log_*" | xargs redis-cli -h 127.0.0.1 -p 6379 DEL
安全批量删除
方法1:使用SCAN(推荐)
# 使用SCAN遍历删除(不影响性能)
redis-cli --scan --pattern "log_*" | xargs -L 1000 redis-cli DEL
方法2:使用Lua脚本
# 创建Lua脚本
redis-cli --eval delete_keys.lua , "log_*"
脚本内容 delete_keys.lua:
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
方法3:使用redis-cli的–scan
# 批量删除(每次1000个)
redis-cli --scan --pattern "session:*" | xargs -L 1000 redis-cli DEL
带密码的Redis
# 有密码的Redis
redis-cli -a password KEYS "log_*" | xargs redis-cli -a password DEL
# 或使用环境变量
export REDISCLI_AUTH=password
redis-cli KEYS "log_*" | xargs redis-cli DEL
统计匹配的keys数量
# 统计数量
redis-cli KEYS "log_*" | wc -l
# 使用SCAN统计
redis-cli --scan --pattern "log_*" | wc -l
预览要删除的keys
# 先查看要删除的keys
redis-cli KEYS "log_*"
# 确认无误后再删除
redis-cli KEYS "log_*" | xargs redis-cli DEL
最佳实践
- 使用SCAN代替KEYS:避免阻塞Redis
- 分批删除:大量keys时分批处理
- 先预览再删除:避免误删
- 备份重要数据:删除前先备份
- 使用Lua脚本:原子性操作