一个 Redis 连接可以为一千个并发用户提供服务吗?

Can one single Redis connection serve a thousand concurrent users?

Context: 我正在构建一个将被 1000 个用户同时访问并使用 Redis 作为数据库的应用程序。我正在使用 node-redis 客户端。我读到建议从应用程序的每个实例只打开一个或几个连接,因为打开连接很昂贵。

问题:假设客户端向Redis发送命令。当应用程序需要发送另一个命令时,此命令正在传输到 Redis 或正在执行(基本上,未完成)。客户端是等待第一个命令完成还是立即向 Redis 发送第二个命令?

这很重要,因为如果客户端等待,应用程序将无法真正充分利用异步,并且当来自一千个用户的命令试图访问 Redis 时,网络调用将成为一个很大的瓶颈。最好命令已经在 Redis 中排队,而不是让它们等待较早的命令完成后再通过网络。

谢谢!

您可以 运行 您的节点应用程序的多个实例,然后使用 Nginx 来平衡负载(假设您正在使用它)。客户端无需等待,负载均衡。

使用 Redis Pub/Sub 创建连接。

这里documentation供参考。

更新: 找到了详细的一步步解释here

它基于 Redis 客户端的实现方式。

在Redis服务器端,所有命令都是可序列化执行的。所以单连接不会成为Redis服务器的问题。

在客户端,如果您的框架使用阻塞式 TCP 连接(如 Jedis),那么很少的连接将成为瓶颈,因为您的命令将在客户端被阻塞以等待空闲连接。

但是如果客户端使用 async / nio(比如 Lettuce),单连接就可以了,因为连接可以在线程之间重用。

此外,数以千计的并发用户对 Redis 来说不是问题,但如果您使用的是单个 Web 服务器,您还应该关注 Web 服务。