*Redis FLUSHALL 命令
清空 Redis 服务器中所有数据库的 key。
*语法
FLUSHALL [ASYNC | SYNC]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| ASYNC | 标志 | 否 | 异步删除,不阻塞(Redis 4.0+) |
| SYNC | 标志 | 否 | 同步删除(默认) |
*返回值
| 条件 | 返回值 |
|---|---|
| 清空成功 | OK |
*时间复杂度
O(N),N 为所有数据库的 key 数量。异步模式立即返回。
⚠️ 生产环境极其危险:FLUSHALL 删除所有数据库的所有数据,误操作可导致灾难性事故。
*示例
> SELECT 0
OK
> SET key1 value1
> SELECT 1
OK
> SET key2 value2
> DBSIZE
(integer) 1
> FLUSHALL ASYNC
OK
> DBSIZE
(integer) 0
> SELECT 0
OK
> DBSIZE
(integer) 0
*常见错误
- 生产误操作:开发/测试环境脚本误连生产执行 FLUSHALL,导致全部数据丢失。
*最佳实践
- rename-command 禁用或重命名:
rename-command FLUSHALL ""或rename-command FLUSHALL FLUSHALL_SECRET。 - 生产环境禁用:通过配置或网络隔离阻止生产实例执行 FLUSHALL。
- 优先用 FLUSHDB:只需清空单个数据库时用 FLUSHDB(同样危险但范围更小)。
- 异步模式:必须使用时加 ASYNC,减少阻塞。
*FAQ
Q: FLUSHALL 和 FLUSHDB 有什么区别? A: FLUSHALL 清空所有数据库(0-15);FLUSHDB 只清空当前数据库。两者都极其危险。
Q: FLUSHALL 会删除 AOF 和 RDB 文件吗? A: 不会。FLUSHALL 只清空内存中的 key。但 AOF 文件会记录 FLUSHALL 命令,重放时也会清空。RDB 文件不会被修改,但下次 BGSAVE 会生成空的 RDB。
Q: FLUSHALL ASYNC 真的不阻塞吗? A: 立即返回,但后台线程删除大量 key 时仍可能消耗 CPU 和内存。大数据量下仍有性能影响。