我在本地redis服务器上使用redis set命令时出错(127.0.0.1:6379)
版本:
npm version : 2.15.0;
node version : 4.4.2;
nodejs verison : 0.10.25;
redis version : 2.7.1;
错误:
events.js:141 throw er; // Unhandled 'error' event
ReplyError: ERR wrong number of arguments for 'set' command at parseError
(/opt/xxx/xxx/node_modules/redis/node_modules/redis
parser/lib/parser.js:193:12) at parseType
(/opt/xxx/xxx/node_modules/redis/node_modules/redis-
parser/lib/parser.js:303:14)
我的所有代码都是这样的:
redis.set("key","value")
在我的本地机器上代码运行成功,但在aws linux机器上我遇到了这个错误。
var matchedMaps = map.get(publicURIField);
if(matchedMaps) {
matchedMaps.forEach(function(matchedMap){
var patternToValidate = matchedMap.pattern;
var type = matchedMap.type;
var tagID = matchedMap.tagID;
var patternToCheck = "cs-uri-stem";
var patternToSave = "";
if(type==1){
patternToCheck = "c-referrer";
}
var regexToFind = new RegExp(patternToValidate.substring(1,patternToValidate.length-1));
var matchedPattern;
if (regexToFind.test(rawLogParsed[patternToCheck].toString())) {
if (matchedMap.regexType=="&"){
matchedMap.patterns.forEach(function(patternObject){
var key = patternObject.pattern.split("=")[0];
var value = rawLogParsed[patternToCheck].toString().split(key)[1];
if(rawLogParsed[patternToCheck].toString().split(key)[1].split("&")){
value = rawLogParsed[patternToCheck].toString().split(key)[1].split("&")[0];
}
patternToSave += key+value+"&";
});
}else{
matchedMap.patterns.forEach(function(patternObject){
if(patternObject.pattern.indexOf("*")>-1){
patternObject.pattern = patternObject.pattern.replace(/\*!/g, '.*');
}
patternToSave += rawLogParsed[patternToCheck].toString().match(patternObject.pattern)+"/";
});
}
patternToSave = patternToSave.substring(0,patternToSave.length-1);
var matchedField = publicURIField,matchedPattern = patternToSave
,key = tagID + "_"+userID+"_"+ matchedField + "_" + matchedPattern + "_" + type + "_" + fixedMinuteNumber;
if (tagUsageInfo[startKeyForRedis+key] == undefined) {
var tagObject = {
pattern:matchedPattern,
matchedField:matchedField,
userID:userID,
tagName:matchedMap.tagName,
monthNumber:parseInt(mMonthToCheck),
minuteNumber: parseInt(fixedMinuteNumber),
hourNumber: parseInt(yearMonthDayHourToCheck),
dayNumber: parseInt(yearMonthDayToCheck),
tagID: tagID,
matchedPattern: matchedPattern,
totalRequests: 1,
totalEgress: parseInt(bytes),
totalTransfered: parseInt(bytes),
totalRest: parseInt(totalWorld),
totalUS: parseInt(totalUS)
}
if(isIngress){
tagObject.totalIngres += parseInt(bytes);
}
dbclient1.set(startKeyForRedis+"tagUsage_"+key,JSON.stringify(tagObject));
tagUsageInfo[startKeyForRedis+"tagUsage_"+key] = startKeyForRedis+key;
}
else {
dbclient1.get(startKeyForRedis+"tagUsage_"+key, function(err, tagObject) {
var tagObjectJson = JSON.parse(tagObject);
tagObjectJson.totalRequests += 1;
tagObjectJson.totalEgress += parseInt(bytes);
tagObjectJson.totalTransfered += parseInt(bytes);
tagObjectJson.totalRest += parseInt(totalWorld);
tagObjectJson.totalUS += parseInt(totalUS);
tagObjectJson.totalRequests += 1;
if(isIngress){
tagObject.totalIngres += parseInt(bytes);
}
dbclient1.del(startKeyForRedis+"tagUsage_"+key);
dbclient1.set(startKeyForRedis+"tagUsage_"+key, JSON.stringify(tagObjectJson));
});
}
}
});
}
任何帮助?
答案 0 :(得分:4)
1)如果您尝试在Windows set上运行Redis,则仅接受两个参数会导致Redis版本问题
2)尝试在Linux上使用最新版本的Redis,它将起作用
答案 1 :(得分:3)
尝试通过以下链接在Windows上安装此版本的Redis。您可以在https://github.com/ServiceStack/redis-windows
中找到更多信息。此链接提供了三个在Windows上安装Redis的选项
选项1)在Windows的Ubuntu上安装Redis
选项2)使用Vagrant运行最新版本的Redis
选项3)运行Microsoft的Redis本机端口
我个人更喜欢选项3。 希望这会有所帮助。谢谢。
答案 2 :(得分:1)
我的所有代码都是这样的:[...]
所有代码的外观并不重要。导致问题的特定行看起来很重要,但不幸的是你没有包含它。
您提供的错误包括一些文件和行号,但您似乎已删除了与您的代码相关的错误。如果您仔细阅读这些消息,那么您应该能够知道这些错误与哪些行相关并专注于这些行。
如果错误出现在服务器上而不是桌面上,那么我会怀疑您是否可能尝试使用文件系统上的某些环境变量或文件来填充程序中的某些变量,这些是在服务器上不可用,导致undefined
放在那里。
当您将console.log()
语句添加到要访问Redis的每个位置时,您肯定会发现问题,以便首先打印它然后再调用Redis。这样至少你会知道导致问题的数据是什么。我怀疑你有一些undefined
值或类似的东西。
请记住JSON.stringify(undefined)
返回undefined
而不是有效的JSON字符串。这样的事情可能会导致问题。添加调试消息将有助于缩小范围。
一些额外的建议:您可以使用prefix
模块的redis
参数,然后您不必在所有地方添加startKeyForRedis+
。您可以设置一次前缀并自动添加前缀。请参阅文档:
答案 3 :(得分:0)
我正在学习使用KUE的nodejs库进行作业调度,该库使用Redis保存数据。 我在运行client.js(将作业放入队列)和worker.js(处理计划作业)时遇到此错误。 在运行客户端之前,我正在运行worker,这就是为什么发生这种情况。 我取消了订单,一切顺利!
答案 4 :(得分:0)
要在v.3或更高版本的Windows Redis上修复此错误。 这就是为什么我从here处获取了3.0.504版本的压缩文件,现在一切正常。
非常简单。
答案 5 :(得分:0)
我曾经遇到过类似类型的错误,这是由于版本较旧的Redis所致。这是兼容性问题,可修复Redis 2.6.12之后的Redis中的错误。确保您安装了Redis v3.X的最新版本。