我的会话商店使用 connect-redis ,当我使用req.session
时,似乎所有操作都是同步,它是&#39 ; s喜欢操作普通的Javascript变量,代码服从命令。但是我检查source code,它使用了异步方式,所以我想知道为什么req.session
就是这样。
另一个问题是,如果我有多个 redis 查询,
client.sadd('test', 1);
client.del('test');
client.sadd('test', 2);
client.sadd('test', 3);
无论我把 del 操作放在哪里,结果总是一样的。我认为这些查询可能以任何顺序运行吗?因为它们都是异步调用的,所以我预期的结果每次都应该不同。
谢谢你的帮助
答案 0 :(得分:2)
以异步方式管理往Redis服务器的往返事实并不意味着查询将以随机顺序发送。
Redis(因此大多数Redis客户端库)支持pipelining,通常用于优化往返次数。想法是发送多个查询,然后等待回复。订单很关键,因为客户端使用它来匹配查询和回复。
Node.js非常适合支持这种机制。 Matt Ranney的node_redis客户端以透明的方式支持流水线操作。如果使用相同的客户端对象,则将按顺序序列化并执行所有查询。
在您的示例中,查询始终以相同的顺序执行是正常的。您可以使用monitor命令检查此点,以显示发送到Redis的查询流。
现在,重要的是管道的最后一个查询与回调相关联,否则您的程序将永远不知道上次查询何时完成。