0

私はnode.jsを使用しており、サーバー上のデータの一部をキャッシュするためにredisを使用しています。

私のコード:

var client = redis.createClient();
client.on("error", function (err) {
    console.log("Error " + err);
});

client.flushall();

function redis_get(key){
    client.get(key, function(err, value) {
        if (err) {
        console.error("error");
        } else {
            return value;
        }
    });
}

function redis_set(key, value){
    client.set(key, JSON.stringify(value), function(err) {
        if (err) {
            console.error("error");
        }
    return true
    });
}

function main(){

    var new_items = [{"id": 1, "name": "abc"}, {"id": 2, "name": "xyz"}, {"id": 3, "name": "bbc"}];

    //set data in redis
    redis_set("key", new_items);

    //get data from redis
    var redis_items = redis_get("key");
}

コードの要約:

main関数が呼び出され、さらに2つの他の関数(redis_setまたはredis_get)が呼び出されます。Redis_setはキーと値のペアを取りますが、redis_getはデータを指すキーを取ります。

問題:

セットは完全に機能しますが、問題はGETにあります。redisで設定した方法でデータを取得できません。データを設定したときにデータを文字列化したので、getでJASON.parse()を使用しました。

4

1 に答える 1

1

redisからのデータの読み取りは非同期操作です。コールバックから値を返すことはできません。redis_getフェッチされた値を受け取る関数にコールバックを渡す必要があります。

function redis_get(key, callback) {
    client.get(key, function(err, value) {
        if(err) {
            console.error("error");
        } else {
            callback(value); // or maybe callback(JSON.parse(value));
        }
    });
}

そして値を取得するには:

redis_get("key", function(redis_items) {

});
于 2013-01-01T13:23:59.880 に答える