node.js express - 尝试redis MULTI / EXEC命令

时间:2016-10-20 17:12:38

标签: javascript node.js express redis

我有一个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命令。

0 个答案:

没有答案