CONNECTION 是 Redis 中与客户端连接管理相关的命令分类,包括身份验证、选择数据库、心跳检测等操作。
CONNECTION 类命令包含以下常用命令:
AUTH [username] password
SELECT index
PING [message]
ECHO message
QUIT
CLIENT LIST [TYPE type] [ID id [id ...]]
CLIENT KILL [ip:port] [ID client-id] [TYPE type] [USER username] [ADDR ip:port] [SKIPME yes/no]
CLIENT SETNAME connection-name
CLIENT GETNAME
CLIENT ID
CLIENT INFO
CLIENT PAUSE timeout [WRITE | ALL]
CLIENT REPLY ON | OFF | SKIP
CLIENT TRACKING ON | OFF [REDIRECT client-id] [PREFIX prefix [prefix ...]] [BCAST] [OPTIN] [OPTOUT] [NOLOOP]
CLIENT CACHING YES | NO
CLIENT NO-EVICT ON | OFF
CLIENT NO-TOUCH ON | OFF
SWAPDB index index
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| password | String | 是 | 认证密码 |
| username | String | 否(ACL 模式下必填) | 用户名 |
| index | Integer | 是 | 数据库索引(0-15) |
| message | String | 否 | PING/ECHO 返回的消息 |
| connection-name | String | 否 | 客户端连接名称 |
| client-id | Integer | 是 | 客户端 ID |
| timeout | Integer | 是 | 暂停时间(毫秒) |
| ip:port | String | 是 | 客户端地址 |
> AUTH mypassword
OK
> AUTH myuser mypassword
OK
> SELECT 1
OK
> SET key "db1"
OK
> SELECT 0
OK
> GET key
(nil)
> PING
PONG
> PING "hello"
"hello"
> CLIENT SETNAME my-app
OK
> CLIENT GETNAME
"my-app"
> CLIENT ID
(integer) 12345
> CLIENT LIST
id=12345 addr=127.0.0.1:54321 ...
> SWAPDB 0 1
OK
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR invalid password | 密码错误 | 确认密码正确 |
| ERR DB index is out of range | 数据库索引越界 | 检查配置的数据库数量 |
| ERR Client sent AUTH, but no password is set | 未设置密码但客户端发送 AUTH | 服务端配置 requirepass |
| ERR No such client | CLIENT KILL 目标不存在 | 确认客户端 ID 正确 |
Q1: AUTH 和 ACL 认证有什么区别? A: 传统 AUTH 只传密码;ACL 认证需传用户名和密码(Redis 6.0+)。
Q2: Redis 默认有多少个数据库?
A: 默认 16 个(0-15),可通过 databases 配置修改。
Q3: SELECT 切换数据库后 key 共享吗? A: 不共享,每个数据库是完全独立的命名空间。
Q4: CLIENT LIST 能看到什么信息? A: 客户端 ID、地址、连接时长、数据库索引、命令统计、输出缓冲区大小等。
Q5: SWAPDB 会阻塞吗? A: 不会阻塞,是 O(1) 操作,只是交换两个数据库的指针。