我有一个noob问题。 我正在编写我的第一个node.js / express REST API。对于我的一种POST方法,客户端可以发送多个“记录”以一次性保存在DB中。
我正在尝试编写我的MULTI / EXEC逻辑...使用redis客户端附带的自述文件中的示例。
但是我看不出我做错了什么。
以下是我通过redis-cli手动写入哈希的方法
127.0.0.1:6379> hset widget:widget1 00:00:00_00:00:00 123@testmeout.com
(integer) 1
127.0.0.1:6379>
这是我的代码看起来像
common.js
var redis = require('redis');
exports.redis = redis.createClient('6379','10.2.2.2');
widgets.js
var common = require('./common');
var redis = common.redis;
router.post('/', function(req, res, next) {
// do a bunch of stuff.
// multi test. all hardcoded for now until i understand how it works.
redis.multi([
["hset", "widget:widget1", "00:00:00_00:00:00", "123@testmeout.com",redis.print ],
["hset", "widget:widget2", "00:00:00_00:00:00", "222@willywonka.com", redis.print]
]).exec(function (err, replies) {
if (err ){
console.log(err);
} else {
console.log(replies);
}
});
在控制台上,我看到了
[ undefined, undefined ]
表示“回复”输出。我没有得到任何错误。但我也无法在数据库中看到任何哈希值。我在redis-cli上尝试了这个查询来验证没有添加到数据库中:
127.0.0.1:6379> scan 0 match widget:w* count 10000000
1) "0"
2) (empty list or set)
编辑1
作为测试,我试图在我的multi中添加一个HGETALL调用。它的工作原理。现在注意多码:
redis.multi([
["hgetall", "widget:7449890"],
["hset", "widget:widget1", "00:00:00_00:00:00", "123@testmeout.com",redis.print ],
["hset", "widget:widget2", "00:00:00_00:00:00", "222@willywonka.com", redis.print]
]).exec(function (err, replies) {
if (err ){
console.log(err);
} else {
console.log(replies);
}
});
在控制台上返回以下内容:
[ { '00:00:00_00:00:00': 'johndoe@test.net' },
undefined,
undefined ]
另外我找到的另一个有趣的工件就是这个 - 当我的节点js app运行时,我打开了redis-cli监控,我看到对数据库进行了以下查询:
1476985090.048093 [0 10.238.36.117:36069] "multi"
1476985090.048118 [0 10.238.36.117:36069] "hgetall" "widget:7449890"
1476985090.048137 [0 10.238.36.117:36069] "exec"
1476985092.800405 [0 10.238.36.118:6379] "PING"
我猜这从而证明HSET命令根本没有被执行。
我也尝试将hset更改为hsetall ...但结果相同。没有错误,也没有执行set命令。