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;误以为执行一次就清干净会导致残留旧数据。