I\'ve read mass-insert provided at redis.io, but it really confused me. I tried to make a file then use \"cat data.txt | redis-cli --pipe\" to insert:
Here it is:
echo -n '*3\r\n$3\r\nset\r\n$3\r\nkey\r\n$5\r\nvalue\r\n' | ./redis-cli --pipe
All data transferred. Waiting for the last reply...
Last reply received from server.
errors: 0, replies: 1
Your problem probably comes from the cr+lf separators. You can use the hexdump -C command to check this point:
echo -n '*3\r\n$3\r\nset\r\n$3\r\nkey\r\n$5\r\nvalue\r\n' | hexdump -C
00000000 2a 33 0d 0a 24 33 0d 0a 73 65 74 0d 0a 24 33 0d |*3..$3..set..$3.|
00000010 0a 6b 65 79 0a 0d 24 35 0d 0a 76 61 6c 75 65 0d |.key..$5..value.|
00000020 0a |.|
00000021
Also, you may want to check your target is a recent Redis instance and not a pre-1-2 version (which does not support the "unified protocol").
Note: the above lines works fine with zsh. If you use bash, you need to add a $ before the quote to trigger ANSI-C quoting:
echo -n $'*3\r\n$3\r\nset\r\n$3\r\nkey\r\n$5\r\nvalue\r\n' | hexdump -C