首页/数据/Redis 进阶速查/多库使用的内存与运维代价
内存与管理99 条

多库使用的内存与运维代价

多数据库(SELECT 0..15)共享同一套内存与配置,跨库操作受限、集群模式仅支持 0 号库,工程上通常单库 + 前缀分区。

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

多库的边界与代价

Redis 默认提供 16 个逻辑库(由 databases 参数决定),用 SELECT 或客户端的 -n 参数切换。它们共享同一份内存、同一套淘汰策略与同一个 maxmemory 上限,所以多库隔离的是键空间视图,而不是资源。集群模式下只能使用 0 号库,databases 被固定为 1,SWAPDB 之类的库级操作也只适用于非集群部署。工程上更常见的做法是单库加键名前缀,既方便迁移也便于后续集群化。

基本信息

默认库数16(databases 配置项)
切换命令SELECT index
客户端写法redis-cli -n 1
集群限制仅 0 号库可用
统计方式INFO keyspace 按库列出
清理范围FLUSHDB 只清当前库
库间操作SWAPDB 互换两个库的数据

典型使用场景

  • 同一实例上区分环境或租户的数据,用库做视图隔离
  • 排查某个键在哪个库里,用 INFO keyspace 逐库核对
  • 规划迁移到集群,评估现有 SELECT 用法要改多少
  • 清理测试数据时只清指定库,避免影响其他业务
  • 解释多库并不隔离内存与淘汰,避免容量误判
  • 把历史遗留的多库用法逐步收敛为键前缀方案
  • 运维脚本需要指定库执行命令,确认客户端参数写法
  • 审计键空间占用时按库统计并汇总到实例总量

查看与切换

查看与切换
redis-cli -n 1 DBSIZE                 # 不带 SELECT 直接指定库
redis-cli SELECT 1                    # 交互会话中切换
redis-cli INFO keyspace               # 各库键数与过期键数
redis-cli -n 1 FLUSHDB                # 只清 1 号库
redis-cli CONFIG GET databases        # 当前库数量设置
redis-cli -n 0 CLIENT INFO            # 确认当前连接所在库

多库与键前缀对照

对比项多库键前缀
资源隔离不隔离内存与淘汰同样不隔离
集群兼容不支持多库兼容
迁移成本需改写 SELECT 逻辑迁移时基本不改代码
统计粒度按库统计需按前缀聚合
多库隔离的是键空间视图而非资源:maxmemory、淘汰策略、持久化与复制都是实例级共享的。
计划集群化之前先统计 SELECT 的使用量,避免迁移中途才发现需要大规模改造客户端。
INFO keyspace 里的过期键数量是按库统计的,排查内存时别把某一个库的数字当成实例总量。

易错点

  • 用多库做资源隔离,期望落空:淘汰与内存上限仍是全实例共享
  • 迁移到集群时才发现多库用法需要整体改造
  • 多库混用导致容量统计口径混乱,按库加总时漏算共享开销
  • 误在错误库执行清理命令,删掉了不属于当前业务的数据
  • 持久化与备份按实例维度进行,却按库维度做容量规划

数据来源与参考

  • Redis 官方文档:多数据库说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌