如何在redis-cli交互环境中删除所有匹配指定模式的Redis键?
在redis-cli内部批量删除指定前缀键的实用方案
我完全懂你的痛点——每次用外部管道命令都要重复输入主机名、端口、认证信息,确实繁琐又容易出错!下面给你几个能在redis-cli会话内部完成批量删键的方法,不用再反复传连接参数:
方案1:SCAN + Lua脚本(推荐,生产环境首选)
SCAN命令不会像KEYS那样阻塞Redis服务,非常适合数据量较大的场景。你可以在已连接的redis-cli里直接执行这段Lua脚本,一次性完成扫描和删除:
EVAL "local cursor = '0' repeat local res = redis.call('SCAN', cursor, 'MATCH', ARGV[1], 'COUNT', 1000) cursor = res[1] for _, key in ipairs(res[2]) do redis.call('DEL', key) end until cursor == '0'" 0 "prefix:*"
- 脚本会循环用SCAN扫描所有匹配
prefix:*的键,每次扫描1000个(COUNT值可以根据你的实际需求调整) - 开头的
0表示不需要传递键名参数,最后面的prefix:*就是你要匹配的前缀模式 - 全程在已连接的redis-cli会话内执行,无需额外输入连接参数
方案2:KEYS + DEL(适合小型数据库)
如果你的Redis数据量不大,不会因为KEYS命令导致服务阻塞,也可以用更简洁的方式:
DEL $(KEYS "prefix:*")
⚠️ 注意:KEYS命令会遍历整个数据库,在大库上执行会让Redis短暂无法响应,生产环境谨慎使用这种方式。
方案3:分步手动删除(直观可控)
要是你想清楚看到要删除的键列表,也可以分两步操作:
- 先查询所有匹配前缀的键:
KEYS "prefix:*"
- 把输出的键名复制出来,直接传给DEL命令:
DEL key1 key2 key3 ...
这种方式适合键数量不多的场景,能精准把控要删除的内容。
内容的提问来源于stack exchange,提问作者Graham S.




