接触nodejs时间不长,想着用nodejs写一下redis基本数据结构的操作,于是写下如下代码:
redisDatabase = {
setKeyValue:setKeyValueFunc,
getValueByKey:getValueByKeyFUnc,
// listLeftPsuh:listLeftPsuhFunc,
// listRighttPsuh:listRighttPsuhFUnc,
// listLeftPop:listLeftPopFunc,
}
function consoleInfo(err, result){
console.log('err: ' + err + ' ' + 'result: ' + result);
}
function setKeyValueFunc(key, value, cbFunc){
client.set(key,value,function(err, value){
if(err){
cbFunc(err, null);
return 'failed';
}else{
cbFunc(null,value);
return value;
}
});
}
function getValueByKeyFUnc(key, cbFunc){
client.get(key, function(err, value){
if(err){
cbFunc(err,null);
return 'failed'
}else{
cbFunc(null,value);
return value;
}
});
}
var ret = redisDatabase.setKeyValue('sanguo','luoguanzhong',consoleInfo);
console.log('插入sanguo返回的结果是: ' + ret);
ret = redisDatabase.getValueByKey('nihao', consoleInfo);
console.log('获取nihao返回的结果是:' + ret);
以下是其运行结果:
插入sanguo返回的结果是: undefined
获取nihao返回的结果是:undefined
err: null result: OK
err: null result: null
可见nodejs在对redis请求redisDatabase.setKeyValue操作的时候,并不是等待redis返回结果再执行console.log('插入sanguo返回的结果是: ' + ret)语句;而是采用事件回调机制(我猜想,待论证),先往下执行了console.log('插入sanguo返回的结果是: ' + ret)语句,此时ret定没有初始值,因此是undefined,在进行redisDatabase.getValueByKey操作的时候也是同样的道理。而后,redis返回数据,触发setKeyValue事件,执行了client.set的回调函数打印了err: null result: OK信息。看来,这正是nodejs的强大之处!这种处理大大减少了处理的逻辑,以及提高了运行的效率。于是代码做了一下的改变
redisDatabase = {
setKeyValue:setKeyValueFunc,
getValueByKey:getValueByKeyFUnc,
// listLeftPsuh:listLeftPsuhFunc,
// listRighttPsuh:listRighttPsuhFUnc,
// listLeftPop:listLeftPopFunc,
}
function consoleInfo(err, result){
console.log('err: ' + err + ' ' + 'result: ' + result);
}
function setKeyValueFunc(key, value, cbFunc){
client.set(key,value,function(err, value){
if(err){
//处理失败情况的逻辑
cbFunc(err, null);
}else{
//处理成功的逻辑
cbFunc(null,value);
}
});
}
function getValueByKeyFUnc(key, cbFunc){
client.get(key, function(err, value){
if(err){
//处理失败情况的逻辑
cbFunc(err, null);
}else{
//处理成功的逻辑
cbFunc(null,value);
}
});
}
redisDatabase.setKeyValue('sanguo','luoguanzhong',consoleInfo);
redisDatabase.getValueByKey('nihao', consoleInfo);
以此做记录,表示由此入门!