我正在尝试使用RESP将表数据大量插入redis哈希,使用Oracle端的传统SQL。我已经为数据构建了RESP协议格式:
表数据:
col1-----col2
v1-----v2
RESP格式:
"*6\r\n$5\r\nHMSET\r\n$4\r\nkey1\r\n$4\r\ncol1\r\n$1\r\n1\r\n$4\r\ncol2\r\n$1\r\n2\r\n"
"编辑:
将此输出保存在文件中,通过管道将其输送到REDIS客户端,以进行大量插入。"
我在这里缺少什么?当我尝试在shell上运行它时,我收到以下错误:
$ cat test_1.dat | redis-cli --pipe
传输所有数据。等待最后的回复...
ERR未知命令' * 6 $ 5 HMSET $ 4 key1 $ 4 col1 $ 1 1 $ 4 col2 $ 1 2'
从服务器收到上次回复。
错误:1,回复:1
请帮帮我!在RESP格式中试图找到问题却浪费了将近一天但徒劳无功。在阅读了很多网页之后,我发现大量插入是最好的选择(性能),因此希望坚持使用RESP作为解决方案,使用RESP进行HMSET。
答案 0 :(得分:1)
我怀疑你的test1.dat
文件中的行结尾已被破坏(也就是说,它们不是ASCII \r\n
)。我能够成功地做到这一点。
准备文件(来自ruby脚本)
s = "*6\r\n$5\r\nHMSET\r\n$4\r\nkey3\r\n$4\r\ncol1\r\n$1\r\n1\r\n$4\r\ncol2\r\n$1\r\n2\r\n"
file = File.new("/Users/sergio/redis_test.txt", 'w')
file.write s
file.close
运行它
% cat redis_test.txt | redis-cli --pipe
All data transferred. Waiting for the last reply...
Last reply received from server.
errors: 0, replies: 1
结果:
127.0.0.1:6379> hgetall key3
1) "col1"
2) "1"
3) "col2"
4) "2"