Как использовать массовую вставку Redis?

Я прочитал mass-insert, предоставленный 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: недопустимая многовалютная длина

Я действительно смущаюсь. Может ли кто-нибудь дать мне простой пример? Большое вам спасибо.

Ответы

Ответ 1

Вот он:

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

Ответ 2

Мне удалось работать с формой SET Key0 Value0.

Пожалуйста, посмотрите fooobar.com/questions/349200/...

Ответ о команде LPUSH. Он также отлично работает с SET.

Подводя итог, дважды укажите параметры

SET "mykey" "myval"

Измените формат файла из unix в windows с помощью unix2dos:

unix2dos myfile.txt

Затем импортируйте с помощью

cat myfile.txt | src/redis-cli --pipe

Это сработало для меня.

Ответ 3

Вы можете сделать это следующим образом:

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

Я надеюсь, что это поможет!