2015-04-03 222 views
1

我試圖使用redis來存儲用戶和天氣的列表,或者他們不在線或離線,並將該信息顯示給其他用戶。在redis中存儲mysql查詢結果

我是相當新的節點,我相信我需要使用一個列表或有序集。

當它到達console.log(答覆);它只顯示「對象」

我想我需要遍歷查詢的結果來建立列表,但我不太確定1)如何循環直接在服務器應用程序中的結果和2)如何基於該查詢構建列表或排序集。

任何意見或建議將不勝感激。

var mysql  = require('mysql'); 
var connection = mysql.createConnection({ 
    host  : 'localhost', 
    user  : 'root', 
    password : 'password', 
    database : 'users' 
}); 

var redis = require('redis') 
, client = redis.createClient();  

connection.connect(); 

connection.query('SELECT * FROM user_profile', function(err, rows, fields) 
{ 
    if (err) throw err; 

    client.set('string key', rows[0], redis.print); 

    client.get("string key", function (err, reply) { 

    console.log(reply); 

    }); 


}); 

connection.end(); 

回答

2

1)我假設行包含一個對象數組,每個對象代表一個用戶數據記錄。

client.set('string key', rows[0], redis.print);

的存儲陣列rows的整個第一個對象,你可以使用foreach語句遍歷所有的值返回。 您將整個對象保存在redis中,但您只需要在線/離線狀態10。此外,你可以只存儲在Redis的鑰匙串(見Redis Keys DocsRedis Set Docs

2)你不需要一個列表或分類設置只對用戶的在線/離線狀態,除非你以後需要一些排序操作。 你可以使用簡單的鍵,我建議使用這樣的模式作爲鍵名:「user:」。

// assuming that user_name property exists, holds username data "david" and it's unique 
client.set("user:"+row[0].user_name, 0, redis.print); // stores key "user:david" = "0";` 

然後檢索它使用:

client.get("user:"+row[0].user_name);

所以,你的SQL查詢的回調函數看起來是這樣的:

function(err, rows, fields) { 

    if (err) throw err; 

    rows.forEach(function(element, index, array){ 

    client.set('user:'+element.user_name, 0, redis.print); 

    client.get("user:"+element.user_name, function (err, reply) { 

     console.log(reply); 

    }); 
    }); 
} 

請注意:用戶名必須是唯一的。您可以使用用戶ID,如果不是

+0

非常感謝。效果很好。 – smugford 2015-04-03 19:46:26