*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

*常见错误

  1. 生产误操作:开发/测试环境脚本误连生产执行 FLUSHALL,导致全部数据丢失。

*最佳实践

  1. rename-command 禁用或重命名rename-command FLUSHALL ""rename-command FLUSHALL FLUSHALL_SECRET
  2. 生产环境禁用:通过配置或网络隔离阻止生产实例执行 FLUSHALL。
  3. 优先用 FLUSHDB:只需清空单个数据库时用 FLUSHDB(同样危险但范围更小)。
  4. 异步模式:必须使用时加 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 和内存。大数据量下仍有性能影响。