使用 Redict 协议批量写入数据

批量加载是将大量预先存在的数据加载到 Redict 的过程。本文档描述了如何快速高效地在 Redict 中批量加载数据。

使用 redict-cli 进行批量加载

使用普通的 Redict 客户端进行批量加载不是一个好主意,原因有几个:逐个发送命令的简单方法由于每个命令的往返时间而变得缓慢。可以使用管道化,但对于大量记录的批量加载,需要在读取响应的同时编写新的命令。

并非所有客户端都支持非阻塞 I/O,也并非所有客户端都能高效地解析响应以最大化吞吐量。由于所有这些原因,将数据大规模导入 Redict 的首选方法是生成一个包含用于插入所需数据的 Redict 命令的文本文件,并使用 redict-cli 发送它们。

例如,要导入以 KeyN 和 ValueN 形式存在的众多键/值对,文件看起来像这样:

  1. SET Key0 Value0
  2. SET Key1 Value1
  3. ...
  4. SET KeyN ValueN

redict-cli管道模式 旨在执行批量加载。它期望通过 STDIN 接收命令:

  1. cat data.txt | redict-cli --pipe

这将产生类似于以下的输出:

  1. All data transferred. Waiting for the last reply...
  2. Last reply received from server.
  3. errors: 0, replies: 1000000

redict-cli 实用程序还将确保仅将从 Redict 实例接收到的错误重定向到标准输出。

管道模式的工作原理

redict-cli 的管道模式旨在尽可能快,同时仍能够理解服务器何时发送了最后一个响应。

这是通过以下方式实现的:

  • redict-cli --pipe 尽可能快地向服务器发送数据。
  • 同时,它在有数据可用时读取数据,尝试解析它。
  • 一旦 STDIN 中没有更多数据可读,它发送一个带有随机 20 字节字符串的特殊 ECHO 命令。通过检查客户端是否作为批量响应接收到相同的 20 字节,这确保了服务器接收到了最新的命令。当达到匹配的响应时,它成功退出。
  • 在解析响应时,它会对解析的所有响应进行计数,以便在最后,它可以输出传输到服务器的命令数量。