在这个列出redis客户端的页面中,我计算了8个异步库。我的理解是,只有当异步回调函数之间不为I/O而斗争时,像node.js或Tor旋风这样的框架才有意义,否则,您最好是同步的。
但Redis是单线程的。因此,他们实际上是在为I/O而战,难道Redis的单线程特性不是取消了异步回调的所有潜在好处吗?为什么在Redis中使用异步客户端是有意义的?
发布于 2014-12-07 14:46:06
Redis的单线程特性与异步客户端的潜在好处无关。尽管具有独特的事件循环,Redis能够同时管理大量的客户端连接。我在一个Redis实例上看到了多达30000个连接的基准测试。
只要考虑到内存中的密钥/值存储(如Redis或memcached ),性能和延迟都由网络往返而不是服务器端CPU消耗所主导。诚然,当网络链路饱和时,网络往返的延迟会增加,但这并不意味着当网络远远没有饱和时,它就变得微不足道。例如,在一个负载非常轻的1 GbE网络上,几乎可以看到200 us的RTT延迟。
其结果是,除了网络链路接近饱和时,客户端连接(或异步回调函数)很少相互竞争I/O。套接字与缓冲器相关联,后者摊销网络上读写操作的成本。大多数情况下,等待状态不是由于I/O竞争,而是由于网络的延迟。
有多种方法可以减少网络延迟的影响:
这些解决方案都是由Redis生态系统支持的,并且可以结合起来以最大限度地提高性能。异步客户端通常允许这种组合。异步客户端的用例是什么?以下是几个例子:
事件循环、异步库和/或协同机制是大多数高效NoSQL引擎的基石之一。
https://stackoverflow.com/questions/27342508
复制相似问题