1. 简介

本文将介绍几种在 Redis 中查看可用数据库的方法。虽然 Redis 本身不提供类似 SHOW DATABASES 这样的直接命令,但我们可以通过一些技巧来获取所需信息。

2. 列出所有 Redis 数据库

⚠️ 首先要明确一点:Redis 的数据库数量是固定的,不能动态增删。默认情况下有 16 个数据库(db0db15),这个值是在配置中定义的。

方法一:通过配置文件查看(最简单粗暴)

如果你能访问 Redis 的配置文件 redis.conf,直接用 grep 搜索即可:

$ cat redis.conf | grep databases
databases 16

✅ 踩坑提示:某些云服务商(如 AWS ElastiCache)可能会修改默认值,所以不要假设一定是 16。

方法二:使用 redis-cli 动态获取(推荐)

大多数情况下我们更倾向于运行时查询。可以使用 CONFIG GET 命令:

127.0.0.1:6379> CONFIG GET databases
1) "databases"
2) "16"

这个方式适用于生产环境,无需重启或访问文件系统。

方法三:通过 RESP 协议直连(底层玩法,一般用不到)

对于一些需要绕过客户端的场景(比如调试协议兼容性),可以直接用 telnet 发送 Redis 序列化协议(RESP) 消息:

$ telnet 127.0.0.1 6379
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
*3
$6
CONFIG
$3
GET
$9
databases
*2
$9
databases
$2
16

⚠️ 这种方式主要用于底层工具开发,普通业务开发基本不会用到。

3. 查看含有数据的数据库

有时候我们不关心空数据库,只想知道哪些 db 里存了数据。这时候就得用到 Redis 的 INFO 命令。

执行以下命令获取 keyspace 信息:

127.0.0.1:6379> INFO keyspace
# Keyspace
db0:keys=2,expires=0,avg_ttl=0
db1:keys=4,expires=0,avg_ttl=0
db2:keys=9,expires=0,avg_ttl=0

输出说明:

  • keys=N:该数据库中 key 的数量
  • expires=N:设置了过期时间的 key 数量
  • avg_ttl=N:剩余平均存活时间(毫秒)

📌 重点:只有包含至少一个 key 的数据库才会出现在这里。也就是说,这是唯一能准确判断“哪些数据库被用了”的方法

小技巧:你可以结合 grep 过滤出非空库:

redis-cli INFO keyspace | grep -E "db[0-9]+:keys=[1-9]"

4. 总结

方法 适用场景 推荐程度
grep config 本地调试、部署脚本 ✅✅✅
CONFIG GET 生产环境运行时查询 ✅✅✅
INFO keyspace 查看实际使用中的数据库 ✅✅✅✅
RESP 手动调用 协议层调试 ✅(极少数情况)

📌 最佳实践建议:

  • 如果你只是想确认最大数据库数量 → 用 CONFIG GET databases
  • 如果你想知道哪些库真正存了数据 → 用 INFO keyspace
  • 不要试图“列出所有数据库名”——Redis 没有这种概念,只有编号 db0~dbN-1

Redis 的多数据库机制其实是个“命名空间”的简化版,实际项目中建议配合 key 前缀使用(如 user:1001, order:2001),避免滥用多 db 导致运维混乱。


原始标题:List All Redis Databases