将mysql的查询结果存储在redis中

我正在尝试使用redis来存储用户和天气的列表,或者不在线或离线,并将该信息显示给其他用户。

我相当新的节点,我相信我需要使用一个列表或sorting集。

当它到达console.log(答复); 行它只显示“对象”

我想我需要遍历查询的结果来build立列表,但我不太确定1)如何循环直接在服务器应用程序中的结果和2)如何build立基于该查询的列表或sorting集。

任何意见或build议将不胜感激。

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(); 

1)我假设行包含一个对象数组,每个对象代表一个用户数据logging。

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

正在存储rows数组的整个第一个对象,您可以使用foreach语句来循环返回的所有值。 您将整个对象保存在redis中,但只需要在线/离线状态10 。 此外,只能在redis键中存储string(请参阅Redis Keys Docs和Redis Set Docs )

2)除非您稍后需要某些sorting操作,否则不需要列表或sorting集仅用于在线/离线状态的用户。 你可以使用简单的键,我build议使用这样的模式为键名:“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查询callback函数可能看起来像这样:

 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); }); }); } 

请注意,用户名必须是唯一的。 如果没有,你可以使用用户名