2015-04-03 4 views
1

Я пытаюсь использовать redis для хранения списка пользователей и погоды, или нет, они находятся в сети или в автономном режиме и отображают эту информацию другим пользователям.хранить результаты запроса mysql в redis

Я довольно новичок в узле, и я считаю, что мне нужно использовать список или отсортированные наборы.

когда он добирается до console.log (ответ); line он показывает только «Объект»

Мне кажется, что мне нужно просмотреть результаты запроса, чтобы создать список, но я не уверен, что 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 массива, вы можете использовать Еогеасп заявление перебрать все возвращаемые значения. Вы сохраняете весь объект в 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); 

    }); 
    }); 
} 

Обратите внимание, что имя пользователя должно быть уникальным , Вы можете использовать идентификаторы пользователя, если не

+0

Большое вам спасибо. прекрасно работает. – smugford

Смежные вопросы