使用 Redict 协议批量写入数据
批量加载是将大量预先存在的数据加载到 Redict 的过程。本文档描述了如何快速高效地在 Redict 中批量加载数据。
使用 redict-cli 进行批量加载
使用普通的 Redict 客户端进行批量加载不是一个好主意,原因有几个:逐个发送命令的简单方法由于每个命令的往返时间而变得缓慢。可以使用管道化,但对于大量记录的批量加载,需要在读取响应的同时编写新的命令。
并非所有客户端都支持非阻塞 I/O,也并非所有客户端都能高效地解析响应以最大化吞吐量。由于所有这些原因,将数据大规模导入 Redict 的首选方法是生成一个包含用于插入所需数据的 Redict 命令的文本文件,并使用 redict-cli 发送它们。
例如,要导入以 KeyN 和 ValueN 形式存在的众多键/值对,文件看起来像这样:
SET Key0 Value0
SET Key1 Value1
...
SET KeyN ValueN
redict-cli
的 管道模式 旨在执行批量加载。它期望通过 STDIN 接收命令:
cat data.txt | redict-cli --pipe
这将产生类似于以下的输出:
All data transferred. Waiting for the last reply...
Last reply received from server.
errors: 0, replies: 1000000
redict-cli
实用程序还将确保仅将从 Redict 实例接收到的错误重定向到标准输出。
管道模式的工作原理
redict-cli
的管道模式旨在尽可能快,同时仍能够理解服务器何时发送了最后一个响应。
这是通过以下方式实现的:
redict-cli --pipe
尽可能快地向服务器发送数据。- 同时,它在有数据可用时读取数据,尝试解析它。
- 一旦 STDIN 中没有更多数据可读,它发送一个带有随机 20 字节字符串的特殊
ECHO
命令。通过检查客户端是否作为批量响应接收到相同的 20 字节,这确保了服务器接收到了最新的命令。当达到匹配的响应时,它成功退出。 - 在解析响应时,它会对解析的所有响应进行计数,以便在最后,它可以输出传输到服务器的命令数量。