搜索然后使用Node.js在Redis中添加记录

时间:2014-11-11 07:21:05

标签: node.js redis

我可能已经累了,但对于我的生活,我无法理解为什么以下不起作用。我正在尝试搜索字符串是否存在,如果不存在,请将其添加到redis数据库

options = options || {};
var counter = 1,
    client  = redis.getClient();
options.name = options.name || '';
if (_.isEmpty(options.name)) {
    return callback('Cannot add name. No name supplied');
} else {
    options.name = options.name.trim();
}
client.get('mySavedKeys' + options.name, function (err, data) {
    if (err) {return callback(err); }
    if (!_.isNull(data)) {
        console.log('Name found', options.name);
        return callback(null, data);
    } else {
        counter += 1;
        console.log('Name not found', options.name);
        console.log('ID', counter)
        client2.set('mySavedKeys' + options.name, counter, function (err) {
            if (err) {return callback(err); }
            console.log('Added', options.name);
            return callback(null, counter);
        });
    }
});

如果我使用async.each运行一个名称数组,那么它似乎运行所有'get'函数然后运行'set'函数,所以我得到重复插入。 我确定答案很明显,但我看不出问题。

1 个答案:

答案 0 :(得分:0)

如果使用async.eachSeries,则可以确保get / set以原子方式发生,而不是所有并行运行。