redis.pipeline.exec()是否“重置”管道?

pexxcrt2  于 2021-06-09  发布在  Redis
关注(0)|答案(0)|浏览(230)

我正在尝试使用管道将大约500k条记录批量插入redis,我的代码大致如下所示

const seedCache = async (
  products: Array<Item>,
  chunkSize,
) => {
  for (const chunk of _.chunk(products, chunkSize)) {
    chunk.forEach((item) => {
      pipeline.set(item.id, item.data);
    });
    await pipeline.exec();
    console.log(pipeline.length);
  }
  redis.quit();
};

实际上,我将chunksize项加载到管道中,然后等待pipeline.exec()返回,然后继续。
我希望“console.log(pipeline.length)”每次都打印“0”,因为它只有在管道被刷新到redis之后才运行。但是,我发现pipeline.length永远不会重置为0;相反,它只是不断地增长,直到它的长度等于产品的长度。这导致我的机器内存不足,无法存储大型数据集。
有人知道为什么会这样吗?另外,这是否是将记录批量插入redis的正确方法?因为使用5000个产品和批大小100运行此脚本时,只会将200个产品插入到缓存中,而它确实成功地插入了1000个具有相同批大小的产品数组。这些文档相当大(约5kb),因此需要以某种方式分批完成。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题