18

redis.io で提供されている大量挿入を読みましたが、本当に混乱しました。ファイルを作成してから、「cat data.txt | redis-cli --pipe」を使用して挿入しようとしました:

    SET Key0 Value0
    SET Key1 Value1
    SET Key2 Value3

それから私はこれを得ました:

    All data transferred. Waiting for the last reply...
    ERR wrong number of arguments for 'set' command
    ERR unknown command '$4'
    ERR wrong number of arguments for 'echo' command
    ERR unknown command '$20'

私も試しました

    *3<cr><lf>
    $3<cr><lf>
    SET<cr><lf>
    $3<cr><lf>
    key<cr><lf>
    $5<cr><lf>
    value<cr><lf>

それから私はこれを得ました: ERR プロトコル エラー: 無効なマルチ バルク長

それは本当に私を混乱させます。誰でも簡単な例を教えてもらえますか? どうもありがとうございました。

4

3 に答える 3

8

ここにあります:

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

あなたの問題は、おそらく cr+lf セパレーターから来ています。hexdump -C コマンドを使用して、この点を確認できます。

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

また、ターゲットが最近の Redis インスタンスであり、1 ~ 2 より前のバージョン (「統合プロトコル」をサポートしていない) ではないことを確認することもできます。

注:上記の行は zsh で正常に動作します。bash を使用する場合は、引用符の前に $ を追加して、ANSI-C 引用符をトリガーする必要があります。

echo -n $'*3\r\n$3\r\nset\r\n$3\r\nkey\r\n$5\r\nvalue\r\n' | hexdump -C
于 2012-11-02T12:50:22.383 に答える
6

次のように実行できます。

echo -e "$(cat data.txt)" | redis-cli --pipe

お役に立てば幸いです。

于 2014-12-02T03:08:05.763 に答える