Redis作为一种高性能的内存数据库,广泛应用于缓存、会话管理、消息队列等场景,在实际运维或开发过程中,可能需要清空Redis中的数据,例如测试环境初始化、数据迁移前清理或误操作后的数据恢复,清空Redis库的命令主要有三种:FLUSHALL、FLUSHDB和SCAN+DELETE,每种命令的适用场景和风险不同,需根据实际需求谨慎选择。

Redis清空库的核心命令及使用方法
FLUSHALL命令:清空所有数据库
FLUSHALL是Redis中最强力的清空命令,它会删除当前Redis实例中所有数据库的数据,包括默认的16个数据库(编号0-15),该命令不会删除配置文件,也不会影响Redis的运行状态,但数据一旦执行无法恢复(除非已开启AOF持久化或RDB快照且能回滚)。
语法:FLUSHALL [ASYNC]
- 同步执行(默认):阻塞Redis服务器,直到所有数据被清空,适用于数据量较小的情况。
- 异步执行(ASYNC):使用Redis的UNLINK机制在后台异步删除数据,避免阻塞主线程,适用于大数据量场景。
注意事项:
- 生产环境慎用,建议先通过
SAVE
或BGSAVE
生成快备份数据。 - 如果Redis开启了持久化(AOF/RDB),清空后需重新加载数据或重启服务。
FLUSHDB命令:清空当前数据库
FLUSHDB用于清空当前选中的数据库(默认为数据库0),不影响其他数据库的数据,与FLUSHALL类似,支持同步和异步模式。

语法:FLUSHDB [ASYNC]
- 示例:清空数据库0的数据,可先通过
SELECT 0
切换目标数据库,再执行FLUSHDB
。
适用场景:
- 需要单独清理某个数据库的数据,如测试环境隔离。
- 多租户架构中,仅清空租户对应的数据库。
SCAN+DELETE命令:安全删除指定模式的数据
如果需要清空符合特定模式的数据(如所有以temp:
开明的键),或避免误操作,可结合SCAN和DEL命令逐步删除,SCAN是Redis的游标式遍历命令,支持增量遍历,避免阻塞服务器。
语法:

SCAN 0 MATCH temp:* COUNT 1000
0
:初始游标,遍历完成后返回0。MATCH temp:*
:匹配键名模式。COUNT 1000
:每次遍历返回的键数量,可根据性能调整。
遍历完成后,通过管道(Pipeline)批量删除键:
SCAN 0 MATCH temp:* COUNT 1000 | DEL
优点:
- 支持条件删除,避免误操作。
- 对服务器影响小,适合大数据量场景。
三种清空方式的对比
命令 | 清空范围 | 阻塞情况 | 适用场景 | 风险等级 |
---|---|---|---|---|
FLUSHALL | 所有数据库 | 同步阻塞 | 全量数据清理,测试环境重置 | 高 |
FLUSHDB | 当前数据库 | 同步阻塞 | 单数据库清理,多租户隔离 | 中 |
SCAN+DEL | 指定模式键 | 低阻塞(分批) | 条件删除,大数据量安全清理 | 低 |
清空操作的最佳实践
- 备份优先:执行清空前,务必通过
BGSAVE
生成RDB快照或启用AOF持久化,以便数据恢复。 - 环境验证:在测试环境验证命令效果,避免误操作生产数据。
- 分批处理:大数据量场景优先使用SCAN+DEL或FLUSHDB ASYNC,减少服务器负载。
- 权限控制:限制Redis的访问权限,避免未授权用户执行清空操作。
相关问答FAQs
Q1: 执行FLUSHALL后,如何恢复数据?
A1: 如果Redis开启了持久化,可通过以下方式恢复:
- RDB快照:将备份的RDB文件放置在Redis的指定目录,重启服务后自动加载。
- AOF文件:如果AOF持久化已启用,清空前可通过
BGREWRITEAOF
生成新的AOF文件,或编辑AOF文件移除清空命令后重启。
若未开启持久化,数据无法恢复,需从备份系统或上游数据源重新导入。
Q2: 为什么推荐使用SCAN+DEL而不是KEYS+DEL?
A2: KEYS
命令会阻塞Redis服务器,直到遍历完所有键,在大数据量场景下可能导致服务不可用,而SCAN
通过游标分批遍历,每次只返回少量键,配合DEL或UNLINK可实现低阻塞删除。KEYS
无法在生产环境使用(Redis已禁用该命令的线上执行),而SCAN
是官方推荐的安全遍历方式。