Node.js下的Redis中通过value取得key(当一个value只对应一个key的情况)

在写项目的时候,需要在 Node.js下的Redis中通过value取得key(当一个value只对应一个key的情况),但是当用client.keys获取key,然后用 for (var key in reply) {}来遍历,里面用 client.get(reply[key], function(err, reply2) {}来获取值,但是死活这个for里面的key变量到 client.get(reply[key], function(err, reply2) {}里面这个key成了常量,就是最后一个值的key值,按逻辑应该是没问题的,但是死活就是搞不定。尝试了良久,终于用一种奇葩的方式搞定。

//    客户端关闭

    sock.on('close', function(data) {

//        这里的data是客户端的数据

//        console.log(sock);

//{ address: '180.109.79.188', family: 'IPv4', port: 10698 }

        var closed_client = sock._peername;

        var closed_iport = closed_client.address + ':' + closed_client.port;

//        Node.js下的Redis中通过value取得key(当一个value只对应一个key的情况)

//------------------------------------------------------------------------

        client.keys('device:iport:*', function(err, reply) {

            // reply is null when the key is missing

//        console.log(reply);

            var i = -1;

            for (var key in reply) {

                client.get(reply[key], function(err, reply2) {

                    i++;

                    if (reply2 == closed_iport) {

//                        console.log("###" + i);

//                        console.log("###" + reply2);

//                        console.log(reply[i]);

                        var key2 = reply[i].split(":");

                        var device_mac = key2[2];

//                        console.log(device_mac);

//                        更改redis里面的信息

                        client.del("device:" + device_mac + ":1", redis.print);

                        client.set("device:" + device_mac + ":0", getNowTime(), redis.print);

                        console.log(getCurentTime() + '===Device: ' + device_mac + " Lost Connection From Server.===");

                    }

                });

            }

        });

//------------------------------------------------------------------------

        console.log(getCurentTime() + '===Client: ' + closed_iport + " closed===");

    });


时间 2015.11.26
评论