Skip to content

Redis - 客户端连接

Redis 接受客户端在其配置的 TCP 端口(默认 6379)上建立连接,也可选择通过 Unix 套接字连接。当新客户端连接时,Redis 会执行多项操作以高效地处理它:

  • 客户端套接字被设置为非阻塞模式,因为 Redis 使用多路复用、非阻塞 I/O (Input/Output) 来单线程并发处理多个客户端。
  • TCP_NODELAY 选项被设置以禁用 Nagle 算法,确保命令立即发送而没有延迟,以获得更好的延迟。
  • 注册一个可读文件事件,允许 Redis 事件循环在客户端命令到达后立即处理它们。

redis.conf 中的 maxclients 指令设置了最大并发客户端连接数。默认值通常为 10,000。

127.0.0.1:6379> CONFIG GET maxclients
1) "maxclients"
2) "10000"

尽管可以更改此值,但实际限制通常由操作系统的最大文件描述符数量决定。在大多数应用程序中,你不需要提高此限制。

应用程序不应为每个请求打开和关闭连接,而应使用连接池。连接池维护一组即时可用的连接,这显著减少了与建立新 TCP 连接相关的延迟和资源开销。所有成熟的 Redis 客户端库都提供内置的连接池支持。

现代版本的 Redis (3.2+) 默认启用 protected-mode。这是一个关键安全特性。如果保护模式开启且未设置密码(requirepass),Redis 将只响应来自环回接口(localhost)的客户端连接。这可以防止不安全的 Redis 实例意外暴露在公共互联网上。

Redis 提供命令来检查和管理已连接的客户端,这对于调试和管理非常有用。

命令描述
CLIENT LIST返回所有连接到服务器的客户端的详细列表,包括它们的地址、连接时长和最后执行的命令。
CLIENT SETNAME 为当前连接分配一个名称。此名称会显示在 CLIENT LIST 中,对于调试时识别应用程序客户端非常有用。
CLIENT GETNAME返回当前连接的名称。
CLIENT KILL [filter]关闭特定的客户端连接。你可以按地址、客户端 ID 或名称进行筛选。对于终止行为异常或空闲的连接很有用。
CLIENT PAUSE <timeout_ms> [WRITE|ALL]暂停所有客户端连接指定毫秒数。这是一个强大的命令,在受管环境的故障转移过程中使用。