一、核心原理
- 连接 Redis 后执行命令
SELECT N 切换数据库,N 取值 0~15
- 客户端初始化时可直接指定
db: 0 / db: 1,无需手动执行 SELECT
二、各主流后端代码示例
1. Node.js (ioredis 推荐)
const Redis = require("ioredis");
// 连接db0
const redis0 = new Redis({
host: "127.0.0.1",
port: 6379,
password: "", // 有密码填写
db: 0 // 指定0号库
});
// 连接db1
const redis1 = new Redis({
host: "127.0.0.1",
port: 6379,
password: "",
db: 1 // 指定1号库
});
redis0.set("key0", "db0数据");
redis1.set("key1", "db1数据");
2. Java SpringBoot (Spring Data Redis)
application.yml 配置
spring:
redis:
host: 127.0.0.1
port: 6379
password:
database: 0 # 默认0库,改成1就是db1
代码动态切换 db
@Autowired
private StringRedisTemplate redisTemplate;
public void testDb1() {
// 切换db1执行操作
redisTemplate.execute((RedisCallback<Object>) conn -> {
conn.select(1); // select 1 切换1号库
conn.set("key2".getBytes(), "db1测试".getBytes());
return null;
});
}
3. Python (redis-py)
import redis
# db0
r0 = redis.Redis(host="127.0.0.1", port=6379, db=0, decode_responses=True)
# db1
r1 = redis.Redis(host="127.0.0.1", port=6379, db=1, decode_responses=True)
r0.set("name", "库0")
r1.set("name", "库1")
print(r0.get("name"))
print(r1.get("name"))
4. Go (go-redis)
package main
import (
"context"
"github.com/go-redis/redis/v8"
)
func main() {
// db0 客户端
rdb0 := redis.NewClient(&redis.Options{
Addr: "127.0.0.1:6379",
DB: 0,
})
// db1 客户端
rdb1 := redis.NewClient(&redis.Options{
Addr: "127.0.0.1:6379",
DB: 1,
})
ctx := context.Background()
rdb0.Set(ctx, "test", "db0", 0)
rdb1.Set(ctx, "test", "db1", 0)
}
5. PHP (Predis)
<?php
require 'vendor/autoload.php';
use Predis\Client;
// db0
$redis0 = new Client([
'host' => '127.0.0.1',
'port' => 6379,
'database' => 0
]);
// db1
$redis1 = new Client([
'host' => '127.0.0.1',
'port' => 6379,
'database' => 1
]);
$redis0->set('a', 100);
$redis1->set('a', 200);
三、原生 Redis 命令切换库
# 登录redis-cli
redis-cli
# 默认进入db0
127.0.0.1:6379> select 1
OK
# 现在操作的是db1
127.0.0.1:6379[1]> set test 123
# 切回db0
127.0.0.1:6379[1]> select 0
OK
四、注意事项
- 数据库相互隔离:db0 和 db1 的 key 完全独立,相同 key 互不干扰
FLUSHDB 只清空当前选中库;FLUSHALL 清空全部 16 个库
- Redis 集群模式下不支持多 db,只能使用 db0
- 生产环境推荐:不同业务分不同 Redis 实例,而非只用 db 区分,隔离性更好