我可能已经累了,但对于我的生活,我无法理解为什么以下不起作用。我正在尝试搜索字符串是否存在,如果不存在,请将其添加到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'函数,所以我得到重复插入。 我确定答案很明显,但我看不出问题。
答案 0 :(得分:0)
如果使用async.eachSeries,则可以确保get / set以原子方式发生,而不是所有并行运行。