Вставить массив в Redis из NodeJS

У меня есть массив, который я заполняю следующим образом:

var obj = [];
for(i = 0; i < data.bids.length; i += 1) {
    obj.push(JSON.parse(data.bids[i][0]));
}

После этого я проверяю, содержит ли массив нужные значения (он содержит):

console.log("Array after the for: \n");
console.log(obj);

Я пытаюсь сохранить это под ключом Redis, но reply это undefined

client.set('order-book:buy:bitstamp', obj, function(err, reply) {
    console.log(reply);
});

Я также пробовал с rpush, но безуспешно.
В чем может быть проблема?


person Fogarasi Norbert    schedule 08.05.2018    source источник
comment
Вы проверили err? .set ожидает строку, похоже, вы хотите client.set(key, JSON.stringify(obj), function (err, reply) { if (err) { console.error(err); } console.log(reply); });   -  person generalhenry    schedule 08.05.2018
comment
client.rpush(key, array, callback), скорее всего, вы получите, поскольку список является более естественным типом данных для ваших данных, он не будет работать, если ключ уже установлен на какой-либо другой тип данных (строка, если вы использовали набор)   -  person generalhenry    schedule 08.05.2018
comment
Это работало с JSON.stringify, если я использую rpush, я получаю undefined.   -  person Fogarasi Norbert    schedule 08.05.2018


Ответы (1)


Здесь вы можете проверить, какие типы совместимы в качестве значений Redis data-types-intro.

Если вам нужно сохранить массив объектов в Redis, единственный способ сделать это — использовать JSON.stringify(obj). Итак, в вашем примере это будет выглядеть примерно так:

const redisValue = JSON.stringify(obj);
client.set('order-book:buy:bitstamp', redisValue, function(err, reply) {
    console.log(reply);
});

При чтении данных из Redis вы можете легко использовать JSON.parse(redisResponse).

person Tomislav    schedule 09.05.2018