当前位置:首页 > 数据库 > 正文

Redis如何快速切换DB?

Redis使用SELECT命令切换数据库,格式为 SELECT 数据库编号(编号默认0-15),SELECT 1`切换到1号库,注意:不同库数据隔离,切换不影响现有连接。

通过 SELECT 命令切换(临时生效)

适用场景:在 Redis 命令行或代码中临时切换数据库。
操作步骤

  1. 连接 Redis 服务:
    redis-cli -h 127.0.0.1 -p 6379
  2. 执行切换命令:
    SELECT 2  # 切换到索引为 2 的数据库

    响应OK 表示切换成功,后续操作均在 DB 2 中执行。

  3. 验证当前数据库:
    INFO keyspace  # 查看 "db2" 的键数量

代码示例(Python)

import redis
# 连接默认数据库(DB 0)
r = redis.Redis(host='localhost', port=6379, db=0)
r.set('key1', 'value_in_db0')
# 切换到 DB 3
r = redis.Redis(host='localhost', port=6379, db=3)
r.set('key2', 'value_in_db3')

通过连接参数切换(永久生效)

适用场景:在建立连接时直接指定目标数据库。
操作方式

  • 命令行连接时指定
    redis-cli -n 5  # 连接时直接进入 DB 5
  • 编程语言连接配置
    # Python 示例
    r = redis.Redis(db=5)  # 指定 DB 5
    // Java (Jedis) 示例
    Jedis jedis = new Jedis("localhost", 6379);
    jedis.select(5);  // 或 new Jedis("localhost", 6379, 5000, 5);

关键注意事项

  1. 集群模式不支持切换
    Redis Cluster 仅使用 DB 0,切换数据库会报错 (error) ERR SELECT is not allowed in cluster mode

    Redis如何快速切换DB?  第1张

  2. 数据库数量配置
    默认 16 个数据库,如需调整,修改 redis.conf

    databases 32  # 改为 32 个数据库

    重启 Redis 生效。

  3. 连接池隐患
    若连接池中的连接被不同业务复用,切换数据库可能导致数据被墙,建议:

    • 为不同业务创建独立的连接池。
    • 避免在代码中混用 SELECT
  4. 跨数据库操作限制
    Redis 不支持跨 DB 的原子操作(如事务、Lua 脚本),所有操作仅限当前 DB。

  5. 生产环境建议

    • 慎用多个 DB:多数据库管理复杂,易引发误操作,推荐使用不同 Redis 实例隔离数据。
    • 避免使用 DB 0:部分攻击者优先扫描 DB 0,使用其他 DB 可增加安全性。

常见问题解答

  • Q:切换后如何查看当前数据库?
    A:执行 CLIENT LIST 命令,返回结果中的 db 字段表示当前 DB 索引(如 db=3)。

  • Q:为什么 SELECT 后数据“消失”?
    A:不同数据库完全隔离,切换后访问的是新 DB 的数据,原 DB 数据不受影响。

  • Q:如何清理非当前数据库?
    A:需先切换到目标 DB 再执行 FLUSHDB,或使用 FLUSHALL 清空所有 DB(慎用)。


  • 临时切换:用 SELECT 索引 命令(如 SELECT 5)。
  • 永久切换:在连接参数中指定 db 索引(如 redis-cli -n 5)。
  • 最佳实践:生产环境优先使用多实例而非多 DB,避免安全风险和管理复杂度。

引用说明基于 Redis 官方文档(redis.io/commands)及实践经验总结,适用于 Redis 5.0+ 版本,配置操作前请备份数据。

0