上下文:我正在构建一个应用程序,它将被1000个用户并发访问,并使用redis作为数据库。我正在使用节点redis客户端。我了解到,建议每个应用程序示例只打开一个或几个连接,因为打开连接很昂贵。
问题:假设客户端向redis发送命令。当应用程序需要发送另一个命令时,这个命令正在传输到redis或者正在执行(基本上,没有完成)。客户端是等待第一个命令完成,还是立即向redis发出第二个命令?
这一点很重要,因为如果客户机等待,应用程序就不能真正充分利用异步,当来自上千个用户的命令试图访问redis时,网络调用将成为一个很大的瓶颈。命令最好已经在redis中排队,而不是让它们在通过网络之前等待一个更早的命令完成。
谢谢!
2条答案
按热度按时间os8fio9y1#
您可以运行节点应用程序的多个示例,然后使用nginx平衡负载(假设您正在使用nginx)。客户机不必等待,负载将得到平衡。
使用redis pub/sub创建连接。
这是供参考的文件。
更新:在这里找到了详细的一步一步的解释
hsvhsicv2#
它基于redis客户端的实现方式。
在redis服务器端,所有命令都可以执行序列化。所以对于redis服务器来说,单一连接不会是一个问题。
在客户端,如果您的框架使用阻塞tcp连接(如jedis),那么很少有连接会成为瓶颈,因为您的命令将在客户端被阻塞以等待空闲连接。
但是如果客户机使用的是async/nio(比如莴苣),那么单个连接就可以了,因为可以在线程之间重用连接。
此外,对于redis来说,数千个并发用户不会是一个问题,但是如果您使用的是单个web服务器,那么您还应该关注您的web服务。