记nodejs之rerdis的初次体验

接触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);

以此做记录,表示由此入门!

转载于:https://my.oschina.net/yaomianwei/blog/743967

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值