RESIS在REDIS中用于HMSET

时间:2015-05-13 07:33:41

标签: redis

我正在尝试使用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。

1 个答案:

答案 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"