# 常用运维命令

URL: https://caijiao.org/redis/06-performance/03-monitoring
Source: docs/redis/06-performance/03-monitoring.md
Description: Redis 常用运维命令涵盖了 Redis 管理、监控、故障排查等操作，帮助管理员高效管理 Redis 实例。

在日常的 Redis 运维中，管理员常常需要执行一些基本的管理、监控、故障排查和优化操作。以下是一些常用的 Redis 运维命令，这些命令可以帮助您更好地管理 Redis 实例。

## 1. Redis 状态查看命令

### 1.1 `INFO`

`INFO` 命令用于获取 Redis 实例的详细统计信息，包括内存使用、客户端连接、持久化状态等。是运维过程中非常重要的监控工具。

```bash
INFO
````

常见的 `INFO` 子命令包括：

* **INFO memory**：查看内存使用情况。
* **INFO stats**：查看 Redis 的统计信息。
* **INFO persistence**：查看持久化状态。
* **INFO replication**：查看主从复制状态。
* **INFO clients**：查看客户端连接状态。

```bash
INFO memory
```

### 1.2 `MONITOR`

`MONITOR` 命令可以实时查看 Redis 执行的所有命令，适用于调试和查看命令执行过程。

```bash
MONITOR
```

注意：`MONITOR` 命令会返回大量信息，通常只在调试时使用，且对性能有一定影响。

### 1.3 `CLIENT LIST`

`CLIENT LIST` 命令可以查看当前与 Redis 实例连接的所有客户端信息，包括客户端的 IP 地址、连接状态、订阅的频道等。

```bash
CLIENT LIST
```

输出示例：

```text
id=7 addr=127.0.0.1:6379 fd=7 name= age=11 idle=11 flags=N db=0 sub=0 psub=0 multi=0 qbuf=35 qbuf-free=32705 obl=0 oll=0 omem=0 events=0 cmd=client
```

### 1.4 `CONFIG GET` 和 `CONFIG SET`

`CONFIG GET` 用于查看 Redis 配置参数，而 `CONFIG SET` 用于动态修改 Redis 配置（不需要重启）。

```bash
CONFIG GET maxmemory
```

```bash
CONFIG SET maxmemory 2gb
```

### 1.5 `PING`

`PING` 命令用于测试与 Redis 服务器的连接是否正常。Redis 会返回 `PONG` 表示连接正常。

```bash
PING
```

返回：

```text
PONG
```

## 2. 数据管理命令

### 2.1 `KEYS`

`KEYS` 命令用于查找 Redis 中符合某个模式的键。注意，`KEYS` 命令在大规模数据中执行会对性能产生影响，避免在生产环境频繁使用。

```bash
KEYS *
```

### 2.2 `DEL`

`DEL` 命令用于删除指定的一个或多个键。

```bash
DEL key1 key2 key3
```

### 2.3 `EXPIRE` 和 `TTL`

`EXPIRE` 命令用于为指定键设置过期时间，而 `TTL` 命令则用于查看键的剩余生存时间。

```bash
EXPIRE key 60  # 设置键 key 的过期时间为 60 秒
```

```bash
TTL key  # 查询键 key 剩余的过期时间
```

### 2.4 `FLUSHDB` 和 `FLUSHALL`

* **`FLUSHDB`**：删除当前数据库中的所有键。
* **`FLUSHALL`**：删除所有数据库中的所有键。

```bash
FLUSHDB
```

```bash
FLUSHALL
```

### 2.5 `SAVE` 和 `BGSAVE`

`SAVE` 命令会同步保存 Redis 数据到磁盘，会阻塞当前线程；而 `BGSAVE` 会在后台异步执行保存操作，不会阻塞客户端请求。

```bash
SAVE
```

```bash
BGSAVE
```

### 2.6 `DUMP` 和 `RESTORE`

* **`DUMP`**：序列化键值对的值，返回一个可存储在磁盘上的二进制序列。
* **`RESTORE`**：将 `DUMP` 命令返回的二进制数据恢复为一个键。

```bash
DUMP key
```

```bash
RESTORE key 0 value  # 0 表示过期时间为 0，value 是通过 DUMP 返回的二进制数据
```

## 3. 主从复制与高可用命令

### 3.1 `SLAVEOF`

`SLAVEOF` 命令用于将一个 Redis 实例设置为另一个 Redis 实例的从节点。

```bash
SLAVEOF 127.0.0.1 6379
```

使用 `SLAVEOF NO ONE` 来取消主从复制关系。

```bash
SLAVEOF NO ONE
```

### 3.2 `REPLICAOF`

`REPLICAOF` 是 `SLAVEOF` 的替代命令，功能相同，用于设置从节点。

```bash
REPLICAOF 127.0.0.1 6379
```

### 3.3 `SYNC` 和 `PSYNC`

`SYNC` 命令会在主从复制时同步数据，`PSYNC` 是 `SYNC` 的更高效版本，用于增量同步数据。

```bash
SYNC
```

## 4. 故障排查命令

### 4.1 `SLOWLOG`

`SLOWLOG` 命令用于查看 Redis 的慢查询日志，可以帮助你识别执行时间较长的命令，进行性能优化。

```bash
SLOWLOG GET 10  # 查看最近的 10 个慢查询日志
```

### 4.2 `LATENCY`

`LATENCY` 命令用于查看 Redis 的延迟问题，帮助排查性能瓶颈。

```bash
LATENCY DOCTOR  # 查看 Redis 的延迟情况并给出诊断建议
```

### 4.3 `MONITOR`

`MONITOR` 命令可以实时查看 Redis 的所有命令执行情况，适用于调试和监控。

```bash
MONITOR
```

### 4.4 `DEBUG OBJECT`

`DEBUG OBJECT` 用于查看 Redis 内部对象的详细信息，帮助排查内存问题。

```bash
DEBUG OBJECT key
```

## 5. 备份与恢复命令

### 5.1 `SAVE` 和 `BGSAVE`

如前所述，`SAVE` 会同步保存数据，`BGSAVE` 则是异步保存。

### 5.2 `RESTORE`

`RESTORE` 命令用于将备份的数据恢复到 Redis 中。

```bash
RESTORE key 0 value
```

### 5.3 `BGREWRITEAOF`

`BGREWRITEAOF` 命令用于重写 AOF 文件，优化 AOF 文件的大小。这个操作是异步的，不会阻塞客户端。

```bash
BGREWRITEAOF
```

## 6. 性能优化命令

### 6.1 `CONFIG SET`

`CONFIG SET` 命令用于修改 Redis 配置参数。它可以在不重启 Redis 的情况下调整一些重要参数。

```bash
CONFIG SET maxmemory 2gb  # 设置最大内存为 2GB
```

### 6.2 `BGSAVE`

`BGSAVE` 是一个异步操作，用于将数据集持久化到磁盘。在高并发场景下，`BGSAVE` 可以避免阻塞 Redis 服务。

```bash
BGSAVE
```

### 6.3 `PERSIST`

`PERSIST` 命令用于移除键的过期时间，使键永不过期。对于需要长期存储的键，可以使用该命令。

```bash
PERSIST key
```

## 总结

这些常用的 Redis 运维命令是日常管理、监控、优化 Redis 实例的基础。通过掌握这些命令，您可以更加高效地管理 Redis，提高系统的稳定性和性能。在实际应用中，根据业务需求灵活调整 Redis 配置，及时排查和解决性能瓶颈，确保 Redis 实例的高效运行。
