我正在尝试使用redis来存储用户和天气列表,不管他们是在线还是离线,并将这些信息显示给其他用户。
我对节点很新,我相信我需要使用列表或排序集。
当它到达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();
答案 0 :(得分:2)
1)我假设行包含一个对象数组,每个对象代表一个用户数据记录。
client.set('string key', rows[0], redis.print);
存储rows
数组的整个第一个对象,您可以使用foreach语句循环返回所有返回的值。
您将整个对象保存在redis中,但只需要在线/离线状态1
或0
。此外,您只能在redis键中存储字符串(请参阅Redis Keys Docs和Redis 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