Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js nodejs redis(&;connect redis)如何处理同步和异步?_Node.js_Redis - Fatal编程技术网

Node.js nodejs redis(&;connect redis)如何处理同步和异步?

Node.js nodejs redis(&;connect redis)如何处理同步和异步?,node.js,redis,Node.js,Redis,我在会话存储中使用了connect redis,当我使用req.session时,它上的所有操作似乎都是同步的,就像在普通Javascript变量上操作一样,代码遵循顺序。但是我检查了,它使用异步方式,所以我想知道为什么req.session会这样做 另一个问题是,如果我有多个redis查询 client.sadd('test', 1); client.del('test'); client.sadd('test', 2); client.sadd('test', 3); 无论我把del操作放

我在会话存储中使用了connect redis,当我使用
req.session
时,它上的所有操作似乎都是同步的,就像在普通Javascript变量上操作一样,代码遵循顺序。但是我检查了,它使用异步方式,所以我想知道为什么
req.session
会这样做

另一个问题是,如果我有多个redis查询

client.sadd('test', 1);
client.del('test');
client.sadd('test', 2);
client.sadd('test', 3);
无论我把del操作放在哪里,结果总是一样的。我想这些查询可以按任何顺序运行,对吗?因为它们都是异步调用的,所以我期望的结果每次都会不同


感谢您的帮助

到Redis服务器的往返是异步管理的,这并不意味着查询将以随机顺序发送

Redis(以及大多数Redis客户端库)支持,通常用于优化往返次数。其思想是发送多个查询,然后等待答复。顺序至关重要,因为客户机使用它来匹配查询和答复

Node.js非常适合支持这种机制。Matt Ranney的客户机以透明的方式支持管道。如果使用相同的客户机对象,所有查询都将被序列化并按顺序执行

在您的示例中,查询总是以相同的顺序执行是正常的。您可以通过使用命令显示发送到Redis的查询流来检查这一点


现在,重要的是管道的最后一个查询与回调相关联,否则您的程序将永远不知道最后一个查询何时完成。

您所说的“结果总是正确”是什么意思。如果它是正确的,那么问题出在哪里?很抱歉,我不清楚,因为我假设它们是以随机顺序运行的,因为异步化,所以每次的结果可能不同,但每次的结果都是相同的,它们是正确的