首页/数据/Redis 进阶速查/FLUSHALL ASYNC 与 FLUSHDB ASYNC
内存与管理99 条

FLUSHALL ASYNC 与 FLUSHDB ASYNC

FLUSH 命令支持 ASYNC 选项在后台线程清空键空间,避免清库瞬间的主线程长阻塞;默认 SYNC 行为是同步释放。

Redis 进阶速查数据更新于 2026-10-13

异步清库与主线程阻塞

FLUSHDB 与 FLUSHALL 支持 ASYNC 选项:加上它以后,命令立即返回,清空键空间后的内存释放交给后台线程慢慢完成;不带选项的默认行为是 SYNC,主线程同步释放,数据量大时会直接卡住数秒。ASYNC 适合缓存重建、测试环境清理这类可以接受「键已不可见、内存稍后释放」的场景。清库属于高风险操作,执行前必须确认实例身份、持久化关系以及是否存在副本。

基本信息

语法FLUSHDB [ASYNC|SYNC]
还有FLUSHALL [ASYNC|SYNC]
默认行为SYNC,主线程同步释放
引入版本ASYNC 自 Redis 4.0 起
生效范围当前库 / 全部库
相关配置lazyfree-lazy-user-flush
观测方式INFO keyspace 与内存回落曲线

典型使用场景

  • 缓存整体重建前清空旧数据,同时希望业务请求不被阻塞
  • 测试或预发环境清理数据,对内存回落时间不敏感
  • 脚本化清库流程需要快速返回,避免命令超时
  • 排查清库导致的延迟尖峰,用 ASYNC 对比验证
  • 配合 UNLINK 与 lazyfree 开关,形成统一的异步释放策略
  • 多环境批量初始化时降低单次操作的阻塞时长

执行与核对

执行与核对
redis-cli DBSIZE                       # 清库前记录规模
redis-cli INFO keyspace                # 确认目标库有哪些
redis-cli FLUSHDB ASYNC                # 清当前库,异步释放
redis-cli FLUSHALL ASYNC               # 清全部库,异步释放
redis-cli CONFIG GET lazyfree-lazy-user-flush  # 是否默认异步
redis-cli INFO keyspace                # 返回时键已不可见
redis-cli INFO memory | grep used_memory       # 内存稍后回落

ASYNC 与 SYNC 对照

对比项SYNC(默认)ASYNC
返回时机释放完成后返回立即返回
主线程阻塞数据量大时明显基本消除
内存回落随命令完成滞后一段时间
适用场景小数据集或可接受阻塞大数据集、要求低阻塞
清库是破坏性操作:执行前用 INFO replication 与连接地址确认实例身份,避免在生产主库上误执行。
在副本上误执行 FLUSH 会清掉副本的数据,并可能引发重新同步,主从关系与业务读流量都会受影响。
ASYNC 执行后的一段时间里内存仍处于高占用,容量判断与告警别被这个时间差误导。

易错点

  • 在副本上误执行 FLUSH,副本数据被清空并触发重新同步
  • 看到内存没有立刻回落就重复执行清库,实际第一次已经生效
  • 生产环境依赖脚本自动清库却没有环境校验,误伤线上实例
  • 把 ASYNC 当成万能解,忽略了内存滞后释放带来的水位风险
  • 清库后忘记通知依赖该库的业务,出现大面积缓存缺失与回源压力

数据来源与参考

  • Redis 官方文档:FLUSHALL / FLUSHDB 说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌