转换Redis大量插入协议格式,与OS无关

时间:2018-04-28 20:36:15

标签: bash docker redis

我正在尝试使用https://redis.io/topics/mass-insert中提到的cat data.txt | redis-cli --pipe命令执行Redis群发插入。

必须转换macOS上的数据格式,以便可以使用cat ${FILE} | perl -i -p -e 's|[\r\n]+|\r\n|g' | redis-cli --pipe执行大量插入。

但是,上述命令在Linux环境(或基于高山的图像构建容器的docker环境)上不起作用。相反,以下命令必须执行cat ${FILE} | sed 's/\r*$/\r/' | redis-cli --pipe

是否有适用于这两种环境的命令?

编辑:附上以下内容:

  1. Alpine Linux上的Redis Mass Insertion脚本:https://gist.github.com/francjohny/f2b13b4cfc147e07e52824ec88ba3781

  2. Mac OS上的Redis Mass Insertion脚本:https://gist.github.com/francjohny/b57756a1e0124dd562959ca5ece2a32b

  3. Redis协议格式数据文件:https://gist.github.com/francjohny/0c21f32d9902809b215f4e92f5e6a9f1

  4. ➜ head ouput.rpf| xxd - Mac OShttps://gist.github.com/francjohny/e1a646ab44e7edd7374d28e9ca400711

  5. ➜ head ouput.rpf| xxd - Alpine Linuxhttps://gist.github.com/francjohny/252904928ded4c045448d12b205228df

1 个答案:

答案 0 :(得分:1)

更新了答案

根据您添加的数据,您似乎只有换行分隔线,而Redis需要回车后跟换行。所以基本上,你想要相当于perl -pe 's/\n/\r\n/' data.rpf | redis-cli --pipe 程序,它不包含在macOS中。但是,macOS确实包含Perl,因此您应该能够使用:

perl -pe 's|[\r\n]*|\r\n|' data.txt | redis-cli ...

在我的Mac上运行正常。

原始答案

您的各种环境中似乎都有混合行结尾。我想这个Perl可以用一个回车替换任意数量的回车和换行,并且像Redis一样需要换行:

get_post_meta()

如果没有,请在评论中回答我的问题。