使用hset将json数据循环到redis中

qxgroojn  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(384)

目前,我正在将mongoose查询中已经分页的数据添加到redis中,这样我就可以根据键来提取它 'listings-page-' + currentPage 我在试着 hget 我刚才为它准备的数据循环到redis中,但是当试图用该键返回所有结果时,它返回的是未定义的。
我猜这是一个append问题,但是我还没有在这里看到相关的命令与为hsetredis数据追加数据相关。谢谢你的帮助!

.then(documents => {

          for (let i = 0; i < documents.length; i++) {

            let docs = JSON.stringify(documents[i]);
            let listingId = documents[i]._id.toString();
            client.hset('listings-page-' + currentPage, listingId, docs);

          }
          client.hget('listings-page-' + currentPage, (err, val) => console.log((val)));
bpzcxfmw

bpzcxfmw1#

我认为这可能是因为异步循环行为。
您是否尝试在集合上使用foreach迭代器编写代码?它看起来是这样的:

documents.forEach(document => {
client.hset('listings-page-' + currentPage,
document._id.toString(),
JSON.stringify(document));});

还有其他一些第三个包来处理承诺(比如bluebird),它允许您处理一些其他场景,比如竞争条件、并行迭代等等。
如果还有什么需要我帮忙的,请告诉我!
我的示例(需要运行redis)localhost:6379)

const redis = require('redis');

const client = redis.createClient(6379, 'localhost' );
client.on('connect', function() {
  console.log('Redis client connected');
  Save();
});

const documents =
  [{_id: '000'}, {_id: '654'}, {_id: '789'},
    {_id: '111'}, {_id: '222'}, {_id: '333'}];
/**
 *
 */
async function Save () {
  console.log('saving');
  const key = 'listings-page-1';
  await documents.forEach((document) => {
    client.hset(key,
        document._id.toString(),
        'lorem ipsum', (err, obj) => console.log(obj));
    console.log(key);
  });
  console.log('saved');
  client.hgetall(key, (err, val) => console.log((val)));
};

相关问题