在redis中存储mysql个查询结果
store mysql query results in redis
我正在尝试使用 Redis 来存储用户列表以及他们是否在线或离线并向其他用户显示该信息。
我是 node 的新手,我认为我需要使用列表或排序集。
当它到达 console.log(回复)时;行它只显示 "Object"
我想我需要遍历查询结果来构建列表,但我不太确定 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();
1) 我假设行包含一个对象数组,每个对象代表一条用户数据记录。
client.set('string key', rows[0], redis.print);
存储的是 rows
数组的第一个对象,你可以使用 foreach 语句循环遍历所有返回的值。
您正在将整个对象保存在 redis 中,但您只需要 online/offline 状态 1
或 0
。此外,您可以在 redis 键中仅存储字符串(参见 Redis Keys Docs and Redis Set Docs)
2) 您不需要仅针对用户的 online/offline 状态的列表或排序集,除非您稍后需要一些排序操作。
您可以使用简单的键,我建议对键名使用这样的模式:"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
我正在尝试使用 Redis 来存储用户列表以及他们是否在线或离线并向其他用户显示该信息。
我是 node 的新手,我认为我需要使用列表或排序集。
当它到达 console.log(回复)时;行它只显示 "Object"
我想我需要遍历查询结果来构建列表,但我不太确定 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();
1) 我假设行包含一个对象数组,每个对象代表一条用户数据记录。
client.set('string key', rows[0], redis.print);
存储的是 rows
数组的第一个对象,你可以使用 foreach 语句循环遍历所有返回的值。
您正在将整个对象保存在 redis 中,但您只需要 online/offline 状态 1
或 0
。此外,您可以在 redis 键中仅存储字符串(参见 Redis Keys Docs and Redis Set Docs)
2) 您不需要仅针对用户的 online/offline 状态的列表或排序集,除非您稍后需要一些排序操作。 您可以使用简单的键,我建议对键名使用这样的模式:"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