*Redis CLIENT ID 命令 返回当前连接的客户端 ID

*语法说明

CLIENT ID

*中文详细说明

CLIENT ID 命令返回当前连接的客户端 ID(client ID)。每个客户端 ID 满足以下约束:

  1. 永不重复:即使连接断开,该 ID 也不会被重新分配给新连接。当再次调用 CLIENT ID 返回相同的值时,可以确认原连接未被断开,只是被服务器内部重用。
  2. 单调递增:若某连接的 ID 值比其他连接的 ID 值大,可以确认该连接是较新创建的。

客户端 ID 在 Redis 5.0 中引入,主要用于配合 CLIENT UNBLOCK 命令使用:

  • 阻塞连接在被阻塞前记录自己的 CLIENT ID
  • 控制连接通过 CLIENT UNBLOCK <client-id> 可以强制解除目标连接的阻塞
  • 这在需要管理大量监控 key 的连接时特别有用,可以避免创建过多连接

客户端 ID 也用于 CLIENT TRACKINGREDIRECT 参数,指定接收缓存失效通知的目标连接。

*可运行示例

*示例 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 字段。