*Redis CONNECTION 命令

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: OK 或 Error(认证失败)
  • SELECT: OK 或 Error(索引无效)
  • PING: PONG 或 message
  • ECHO: message
  • QUIT: 关闭连接
  • CLIENT LIST: 客户端信息字符串数组
  • CLIENT KILL: 被关闭的客户端数量
  • CLIENT ID: 当前客户端 ID(Integer)
  • CLIENT INFO: 客户端信息字符串
  • CLIENT PAUSE: OK
  • SWAPDB: OK

*时间复杂度

  • AUTH: O(1) - SELECT: O(1) - PING: O(1) - CLIENT LIST: O(N),N 为客户端数量
  • CLIENT KILL: O(N) - SWAPDB: O(1) ---

*示例

*认证连接

> 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 正确

*最佳实践

  • 生产环境启用 ACL 认证,使用用户名+密码
  • 使用 CLIENT SETNAME 标识应用来源,便于排查
  • 连接池设置合理的 idle 超时和心跳检测
  • 多租户场景使用 SELECT 隔离数据(或更好的用 key 前缀)
  • 避免频繁 SELECT 切换数据库,增加连接池复杂度
  • 使用 CLIENT PAUSE 进行维护窗口操作

*FAQ

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) 操作,只是交换两个数据库的指针。