如何解决:ERR协议错误:预期为'$',得到了''

时间:2019-01-31 14:37:54

标签: python-3.x windows powershell redis cat

我正在使用Redis-3.2.1,Python-3.6,Powershell-v1.0和Windows7。我正在尝试对Redis执行批量插入。我已经在Python 3.6中使用RESP协议创建了一个大容量插入文件。当我在Powershell中执行“ cat redis_data.txt | redis-cli --pipe”时,发生以下错误:

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 :(得分:1)

您的文件格式似乎有问题。请使用以下格式创建输入文件:

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