*Redis CLIENT ID 命令 返回当前连接的客户端 ID
*语法说明
CLIENT ID
*中文详细说明
CLIENT ID 命令返回当前连接的客户端 ID(client ID)。每个客户端 ID 满足以下约束:
- 永不重复:即使连接断开,该 ID 也不会被重新分配给新连接。当再次调用 CLIENT ID 返回相同的值时,可以确认原连接未被断开,只是被服务器内部重用。
- 单调递增:若某连接的 ID 值比其他连接的 ID 值大,可以确认该连接是较新创建的。
客户端 ID 在 Redis 5.0 中引入,主要用于配合 CLIENT UNBLOCK 命令使用:
- 阻塞连接在被阻塞前记录自己的 CLIENT ID
- 控制连接通过
CLIENT UNBLOCK <client-id>可以强制解除目标连接的阻塞 - 这在需要管理大量监控 key 的连接时特别有用,可以避免创建过多连接
客户端 ID 也用于 CLIENT TRACKING 的 REDIRECT 参数,指定接收缓存失效通知的目标连接。
*可运行示例
*示例 1:获取当前连接的客户端 ID
# 获取当前连接的 ID
redis-cli CLIENT ID
预期输出:
(integer) 42
*示例 2:两个新连接的 ID 比较
# 第一个连接
redis-cli CLIENT ID
# 第二个连接(新建立的连接)
redis-cli -p 6379 CLIENT ID
预期输出(假设依次执行):
(integer) 100
(integer) 101
*示例 3:配合 CLIENT UNBLOCK 解除阻塞
# 连接 A(将被阻塞的连接):先记录自己的 ID
CLIENT_A_ID=$(redis-cli CLIENT ID)
echo "Connection A ID: $CLIENT_A_ID"
# 连接 A 执行阻塞命令(在后台执行)
# redis-cli BRPOP queue1 queue2 0
# 连接 B(控制连接):解除连接 A 的阻塞
redis-cli CLIENT UNBLOCK $CLIENT_A_ID
预期输出:
Connection A ID: 2934
(integer) 1
*示例 4:验证 ID 的单调递增性
# 连接 1
ID1=$(redis-cli CLIENT ID)
# 连接 2
ID2=$(redis-cli -p 6379 CLIENT ID)
# 连接 3
ID3=$(redis-cli -p 6379 CLIENT ID)
echo "ID1=$ID1, ID2=$ID2, ID3=$ID3"
预期输出(ID 依次递增):
ID1=50, ID2=51, ID3=52
*返回值
- 整数回复(Integer Reply):当前连接的客户端 ID,一个 64 位无符号整数
*版本兼容性
| Redis 版本 | 变更说明 |
|---|---|
| >= 5.0.0 | 新增 CLIENT ID 命令 |
| < 5.0.0 | 不支持此命令 |
*时间复杂度
O(1) — 常量时间。仅读取连接结构中的 ID 字段。