kaisawind's blog
  • 关于
  • 所有帖子

批量删除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

最佳实践

  1. 使用SCAN代替KEYS:避免阻塞Redis
  2. 分批删除:大量keys时分批处理
  3. 先预览再删除:避免误删
  4. 备份重要数据:删除前先备份
  5. 使用Lua脚本:原子性操作


辽ICP备2021007608号 | © 2026 | kaisawind

Facebook Twitter GitHub