将多个文件批量插入 Redis

Posted

技术标签:

【中文标题】将多个文件批量插入 Redis【英文标题】:Mass inserting multiple files into Redis 【发布时间】:2021-12-25 23:39:25 【问题描述】:

我正在尝试将多个数据文件大量插入 Redis,因为一次插入整个数据,只使用一个文件,由于文件太大而无法正常工作。

我正在使用以下命令将一个文件插入 Redis:

cat data.txt | redis-cli --pipe

如何通过一个命令一次插入多个文件? 我尝试了cat data.txt data1.txt (...) | redis-cli --pipe,但这引发了与使用一个文件的方法相同的“太大”错误。

【问题讨论】:

我不明白。如果它在您发送data.txt 时生成错误提示输入太大,您为什么还要尝试发送该文件和第二个文件 - 肯定会更大? 我的回答解决了您的问题吗?如果是这样,请考虑接受它作为您的答案 - 通过单击计票旁边的空心对勾/复选标记。如果没有,请说出什么不起作用,以便我或其他人可以进一步为您提供帮助。谢谢。 meta.stackexchange.com/questions/5234/… 【参考方案1】:

您的示例对我来说没有多大意义,但我想我可以向您展示一种使用 GNU Parallel 将文件拆分成块的方法。您没有说明文件的内容或大小,但假设它是一百万行,那么我可以使用命令 seq 1000000 生成类似于您的文件的输出,所以我将使用 seq 来合成线如下。

好的,假设您的文件中有 800 行 - 如果您有数百万行也没关系。所以我们可以将 800 行发送到 GNU Parallel 并告诉它把它分成每个 200 行的块,然后将每个块传递给 wc -l 以计算行数:

# Generate 800 lines and ask GNU Parallel to send 200 lines to each of multiple processes to count them
seq 800 | parallel -N 200  --pipe wc -l
200
200
200
200

如果文件中的行数不能被每个作业的行数整除,则最后一个作业将获得更少的行数。我按顺序添加了-k 参数以keep 输出,这样您就可以看到它是最后一个获得更少行的进程:

seq 800 | parallel -k -N 300  --pipe wc -l
300
300
200

TLDR;我建议您运行如下命令 - 尝试使用重载 redis-cli

的值
cat OneOrMoreBigFiles | parallel -N 1000 --pipe redis-cli --pipe

【讨论】:

以上是关于将多个文件批量插入 Redis的主要内容,如果未能解决你的问题,请参考以下文章

使用 SSIS 2008 批量插入多个 XML 文件

StackExchange.Redis 管道 批量 高性能插入数据

如何批量在多个文件前面添加名称或者数字?

批量查询超出速率限制

批量查询超出速率限制

在Redis集群中使用pipeline批量插入