Redis 客户端连接至 Redis 服务器的基本过程如下:
-
监听连接:
Redis 服务器通过监听特定的 TCP 端口(默认是 6379)或 Unix Domain Socket (UDS) 来接收客户端连接请求。Unix Socket 提供了在同一台机器上的进程间高效通信机制。 -
建立连接:
客户端(应用程序)通过网络编程接口向 Redis 服务器发起连接请求,建立 TCP 连接或者连接到 UDS。 -
Socket 配置:
当 Redis 接收到一个新连接后,它会将客户端的 socket 设置为非阻塞模式,并可能设置TCP_NODELAY
属性以禁用 Nagle 算法,提高小数据包的传输效率。 -
事件驱动:
Redis 使用 I/O 多路复用技术(如 epoll、kqueue 或 select),创建一个可读的文件事件来监听此客户端 socket 上的数据发送。这意味着 Redis 可以在一个线程内同时处理多个客户端连接,而无需为每个连接维持一个独立的线程。 -
命令交互:
成功建立连接后,客户端可以通过 Redis 协议发送命令到服务器。Redis 客户端库(如 Jedis、phpredis、redis-py、StackExchange.Redis 等)通常提供了便捷的 API 来封装这些命令操作。 -
连接管理:
Redis 服务器可以配置最大连接数 (maxclients
参数),超过这个数目则拒绝新的连接请求。客户端还可以使用CLIENT
命令系列来进行连接相关的管理操作,如查看连接列表、设置连接名称、暂停或终止某个客户端连接等。
对于集群或 Sentinel 环境下的 Redis 连接,客户端可能会先连接到 Sentinel 服务来发现实际的主节点地址,然后连接到主节点或从节点进行读写操作,并且能够自动重定向到新的主节点(在主从切换的情况下)。