# 5.1 切换数据库操作

在默认情况下,Redis服务器在启动时会**创建16个数据库**,不同的应用程序可以连到不同的数据库上,通过键值对的形式实现缓存等操作.

在实际项目里,常见的操作有**通过修改配置更改在启动Redis服务器时创建数据库的个数**,以及**通过`SELECT`命令切换当前程序所用的Redis数据库**.

## 5.1.1 查看和设置默认的数据库个数

* step1. 停止并删除之前创建的redis容器

```
(base) root@yuanhong StudyRedisBaseOnDocker % docker ps -a 
CONTAINER ID   IMAGE                        COMMAND                  CREATED        STATUS                    PORTS     NAMES
```

可以看到,此时没有任何容器被启动或停止

* step2. 创建一个空的配置文件`redis.conf`

```
(base) root@yuanhong StudyRedisBaseOnDocker % cd conf/chapter5/section5-1 
(base) root@yuanhong section5-1 % cat redis.conf
(base) root@yuanhong section5-1 % 
```

* step3. 基于上述配置文件创建redis服务端

```
(base) root@yuanhong section5-1 % docker run -itd --name redis-server -v /StudyRedisBaseOnDocker/conf/chapter5/section5-1/redis.conf:/redisConfig/redis.conf -p 6379:6379 redis:latest redis-server /redisConfig/redis.conf
2c51ddee569950dd0d6b460433f176239aa6ade427d61e2f57f87edec8d8204c
```

此时由于配置文件中没有内容,所以启动时还是会加载各种默认的配置参数

* step4. 检查数据库数量

```
(base) root@yuanhong section5-1 % docker exec -it redis-server /bin/bash
root@2c51ddee5699:/data# redis-cli
127.0.0.1:6379> CONFIG GET databases
1) "databases"
2) "16"
```

* step5. 停止容器并修改配置文件

停止容器:

```
127.0.0.1:6379> exit
root@2c51ddee5699:/data# exit
exit
(base) yanglei@yuanhong section5-1 % docker stop redis-server      
redis-server
```

修改配置文件的内容如下:

```
(base) yanglei@yuanhong section5-1 % cat redis.conf 
# 指定数据库数量
databases		 12
```

* step6. 重新启动容器

```
(base) yanglei@yuanhong section5-1 % docker start redis-server
redis-server 
```

* step7. 进入容器检查配置是否生效

```
(base) yanglei@yuanhong section5-1 % docker exec -it redis-server /bin/bash
root@2c51ddee5699:/data# redis-cli
127.0.0.1:6379> CONFIG GET databases
1) "databases"
2) "12"
```

## 5.1.2 用`SELECT`命令切换数据库

使用`CLIENT LIST`命令查看客户端连接信息:

```
127.0.0.1:6379> CLIENT LIST
id=3 addr=127.0.0.1:35774 laddr=127.0.0.1:6379 fd=8 name= age=121 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=40928 argv-mem=10 obl=0 oll=0 omem=0 tot-mem=61466 events=r cmd=client user=default redir=-1
```

其中的`db=0`表示当前客户端使用的是0号数据库

在第0号数据库中设置一些键值对:

```
127.0.0.1:6379> SET name 'Peter'
OK
```

使用`SELECT`命令切换数据库:

```
127.0.0.1:6379> SELECT 1
OK
```

再次查看客户端连接信息:

```
127.0.0.1:6379[1]> CLIENT LIST
id=3 addr=127.0.0.1:35774 laddr=127.0.0.1:6379 fd=8 name= age=286 idle=0 flags=N db=1 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=40928 argv-mem=10 obl=0 oll=0 omem=0 tot-mem=61466 events=r cmd=client user=default redir=-1
```

可以看到,此时`db=1`

获取刚刚设置的key:

```
127.0.0.1:6379[1]> GET name
(nil)
```

切换回0号数据库后再次获取刚刚设置的key:

```
127.0.0.1:6379[1]> SELECT 0
OK
127.0.0.1:6379> GET name
"Peter"
```

在实际应用中,一般不会更改Redis服务器的数据库个数.但是当不同的应用同时使用同一个Redis服务器时,建议让不同的应用使用不同的数据库,比如让订单应用模块使用0号数据库,会员应用模块使用1号数据库


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://redis.sai.show/di-5-zhang-redis-shu-ju-ku-cao-zuo-shi-zhan/5.1-qie-huan-shu-ju-ku-cao-zuo.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
