Как исправить: ошибка протокола ERR: ожидается '$', получено '' - PullRequest
0 голосов
/ 31 января 2019

Я использую Redis-3.2.1, Python-3.6, Powershell-v1.0 и Windows 7. Я пытаюсь выполнить массовую вставку в Redis.Я создал файл массовой вставки с протоколом RESP в Python 3.6.Когда я выполняю «cat redis_data.txt | redis-cli --pipe» в Powershell, возникает следующая ошибка:

PS C:\Users\shiner> cat redis_data.txt | redis-cli --pipe
ERR Protocol error: expected '$', got ' '
All data transferred. Waiting for the last reply...
No replies for 30 seconds: exiting.
errors: 2, replies: 1

(я новичок в powershell, поэтому имейте это в виду)

Вот мой код Python:

import redis
r = redis.Redis(host='localhost', port=6379, db=0)

import sys

def gen_redis_proto(*args):
    proto = ""
    proto += "*"+str(args.__len__())+"\r\n"
    for arg in args:
        proto += "$"+str(str(arg).__len__())+"\r\n"
        proto += str(arg)+"\r\n"
    return proto

def generate_data_file():
    f = open('redis_data.txt', 'w')
    [f.write(gen_redis_proto("SET", "KEY{0}".format(x), 
                         "VALUE{0}".format(x)))
    for x in range(0, 400)]

generate_data_file()

Пример текстового файла выглядит следующим образом:

"* 3 $ 3SET $ 4KEY0 $ 6VALUE0 * 3 $ 3SET $ 4KEY1 $ 6VALUE1 *3 $ 3set $ 4KEY2 $ 6VALUE2 * 3 $ 3set $ 4KEY3 $ 6VALUE3 * 3 $ 3set $ 4KEY4 $ 6VALUE4 * 3 $ 3set $ 4KEY5 $ 6VALUE5 * 3 $ 3set $ 4KEY6 $ 6VALUE6 * 3 $ 3set $ 4KEY7 $ 6VALUE7 * 3 $ 3SET $ 4KEY8 $ 6VALUE8 * 3 $ 3set $ 4KEY9 $ 6VALUE9 * 3 $ 3set $ 5KEY10 $ 7VALUE10 * 3 $ 3set $ 5KEY11 $ 7VALUE11 * 3 $ 3set $ 5KEY12 $ 7VALUE12 * 3 $ 3set $ 5KEY13 $ 7VALUE13 * 3 $ 3set $ 5KEY14 $ 7VALUE14 ... Value399 '

' Value399 '- это последние 8 символов в текстовом файле.

1 Ответ

0 голосов
/ 31 января 2019

Кажется, проблема с форматом файла.Пожалуйста, создайте входной файл в следующем формате:

SET Key0 Value0 
SET Key1 Value1 
...
SET KeyN ValueN 

Выше команда PowerShell работает нормально для меня.Выход:

PS C:\> cat redis_data.txt | redis-cli  --pipe
All data transferred. Waiting for the last reply...
Last reply received from server.
errors: 0, replies: 2
...