首页/数据/数据库速查/DBSIZE 与 FLUSH/大键安全清理
Redis 命令96 条

DBSIZE 与 FLUSH/大键安全清理

库级操作:DBSIZE 看键数(O(1))、FLUSHDB/FLUSHALL 清库(ASYNC 后台释放)、SWAPDB 换库(非集群);大键删除优先 UNLINK 或渐进清理,避免阻塞。

数据库速查数据更新于 2026-10-13

DBSIZE 与清库操作是什么

DBSIZE 返回当前库的键数量,是 O(1) 的元数据读取,不扫描键空间。清库相关命令有三个:FLUSHDB 清空当前库、FLUSHALL 清空所有库、SWAPDB 交换两个库的数据。三者都不可恢复,只能靠备份找回。加 ASYNC 参数后 Redis 把内存回收交给后台线程,命令立即返回,因此大库上应优先使用异步形式。

基本信息

统计DBSIZE 返回当前库键数量,复杂度 O(1)
清当前库FLUSHDB / FLUSHDB ASYNC
清所有库FLUSHALL / FLUSHALL ASYNC(高危)
换库SWAPDB 源库 目标库(Cluster 模式不支持)
大键删除UNLINK key(4.0+,后台线程释放内存)

典型使用场景

  • 容量监控:DBSIZE 采集键数量趋势,发现键数量异常增长
  • 测试环境重置:进入测试前清空目标库,务必确认连的是测试实例
  • 发布前清理缓存:按发布计划清掉指定库的缓存键,让新版本重新预热
  • 热点大键回收:用 UNLINK 替代 DEL 删除大键,避免主线程阻塞
  • 库切换演练:非集群环境下用 SWAPDB 做新老数据结构切换的快速回滚

常用操作

常用操作
DBSIZE                  # 当前库键数量,O(1)
SELECT 0                # 先确认目标库,别在错误的库上执行清空
FLUSHDB ASYNC           # 异步清空当前库,大库优先用这个
FLUSHALL ASYNC          # 清空所有库(高危,执行前需二次确认)
SWAPDB 0 1              # 交换 0 号库与 1 号库(Cluster 不支持)
UNLINK bigkey           # 后台线程释放大键内存,替代 DEL
RENAME bigkey tmp:trash # 也可先改名隔离,确认无人使用后再删
INFO keyspace           # 各库键数量与过期键数量概览

命令对比

命令作用范围可恢复性注意
DBSIZE当前库计数只读无风险O(1),可放心高频采集
FLUSHDB当前库数据不可恢复大库同步执行会阻塞所有请求
FLUSHALL实例所有库不可恢复生产上属于重大操作,需双人复核
SWAPDB两个库互换可再换回来Cluster 模式不支持
UNLINK单个键不可恢复后台线程回收,避免阻塞
执行 FLUSHALL 前做三件事:确认连的是哪个实例(地址、端口、库号)、确认最近一次备份可用、让另一个人复核命令字符串。清库没有任何撤销手段。
集群环境下清库要对每个主节点分别执行,没有一次覆盖整个集群的 FLUSHALL;误以为执行一次就清干净会导致残留旧数据。

易错点

  • 同步执行 FLUSHDB 清大库:主线程一次性释放大量内存,期间所有请求排队超时,应改用 ASYNC
  • 在错误实例上执行清库:把清缓存写成例行脚本后误连生产,属于典型灾难,脚本里必须写死环境校验
  • 以为集群执行一次 FLUSHALL 就清空全部节点:需要逐节点执行,否则部分分片仍保留旧数据
  • 用 DEL 删除超大键:同步释放会长时间阻塞单线程,改用 UNLINK 或渐进式分批删除
  • 把 DBSIZE 当内存用量指标:它只统计键数量,不反映内存占用,内存要结合 INFO memory 一起看

数据来源与参考

  • Redis 官方文档: DBSIZE
  • Redis 官方文档: FLUSHALL

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌