在我的应用程序(node / express / redis)中,我使用一些代码同时更新数据库中的多个项目:
app.put('myaction', function(req, res){ // delete stuff db.del("key1"); db.srem("set1", "test"); // Add stuff db.sadd("set2", "test2"); db.sadd("set3", "test3"); db.hmset("hash1", "k11", "v11", "k21", "v21"); db.hmset("hash2", "k12", "v12", "k22", "v22"); // ... // Send response back res.writeHead(200, {'content-type': 'application/json'}); res.write(JSON.stringify({ "status" : "ok" })); res.end(); });
我可以确定在方法返回之前将执行所有这些操作吗?我关心的是异步处理。由于我不在db操作中使用回调函数,因此可以吗?
使用MULTI / EXEC命令创建命令队列并连续执行它们。然后使用回调发送回连贯的响应(成功/失败)。请注意,您必须使用Redis的AOF来避免这种情况(在发生崩溃的情况下):db状态与您的逻辑不一致,因为仅执行了队列中的部分命令:即MULTI / EXEC在执行时不是事务性的。这是一个有用的 参考。