Как мне сохранить массив в Redis? - PullRequest
0 голосов
/ 20 октября 2019

У меня есть запрос, который возвращает массив объектов в javaScript (json), и мне нужно сохранить его в redis без необходимости foreach,

. В настоящее время я использую *Команда 1006 * set и преобразовал массив json в string, но я не знаю, насколько это оптимально, поскольку мы говорим о массиве json, преобразованном в string.

Это код, который вы используете, чтобы попытаться эмулировать хранилище массива json объектов в redis.

client.set('proyectos',JSON.stringify(proyectos));
 res.json(proyectos);

Здесь я извлекаю цепочку и преобразовываю ее обратно в массив json объектов.

redisCtrl.getProyectos=async (req,res,next)=>{
   client.get('proyectos').then(proyectos=>{ 
       if(proyectos){
          console.log("ok"); 
          res.json(JSON.parse(proyectos)); 
        }
        else
          next();
   }).catch(err=>{
       console.error("error"); 
       next();
   });
};  

Это возвращает следующее:

[{"id":1,"nombre":"cualquier","descripcion":"descripción muy especifica","monto":"100000","fecha":"2019-10-16","estado":true},{"id":2,"nombre":"conjunto autosustentable","descripcion":"es un proyecto creado para favorecer al medio ambiente y reducir costos de estilo de vida","monto":"15000","fecha":"2019-12-16","estado":true},{"id":3,"nombre":"cultivo autosustentable","descripcion":"el objetivo es reducir el costo de producción de alimento y favorecer el medio ambiente","monto":"190000000","fecha":"2019-12-16","estado":true}]

Само по себе это не ошибка, но я бы подумал, что это плохая практика, как упоминалось выше, и больше для среды массового производства, так как мне сделать это наиболее оптимальным способом?

1 Ответ

0 голосов
/ 22 октября 2019

если ваш объект мелкий, вы можете использовать хеш для каждого элемента и список для массива

, используя ключ списка для имени ключей элемента itemlist, используя хеш для хранения фактических данных в ключе, напримеркак item:1

const data = [
    {
        id: 1,
        nombre: 'cualquier',
        descripcion: 'descripción muy especifica',
        monto: '100000',
        fecha: '2019-10-16',
        estado: true
    },
    {
        id: 2,
        nombre: 'conjunto autosustentable',
        descripcion:
            'es un proyecto creado para favorecer al medio ambiente y reducir costos de estilo de vida',
        monto: '15000',
        fecha: '2019-12-16',
        estado: true
    },
    {
        id: 3,
        nombre: 'cultivo autosustentable',
        descripcion:
            'el objetivo es reducir el costo de producción de alimento y favorecer el medio ambiente',
        monto: '190000000',
        fecha: '2019-12-16',
        estado: true
    }
]

// using ioredis lib in this example
// saving it to redis

for (let i = 0; i < data.length; i++) {
    const item = data[i]
    await redis.hmset('item:${item.id}', item)
    await redis.lpush('itemlist', `item:${item.id}`)
}

// getting it back from redis: first geet the keys ; then get all the data
const keys = await redis.lrange('itemlist', 0, -1) // 0, -1 => all items

const p = redis.pipeline()
for (let i = 0; i < keys.length; i++) {
    const key = keys[i];
    p.hgetall(key)
}
const resp = await p.exec()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...