当值有空格时,Redis SET失败

时间:2013-05-06 04:50:40

标签: string redis space

我刚刚解雇了Redis并正在玩它。以下工作正常:

SET billybob "hello"
+OK

然而,以下失败:

SET billybob "hey how are you"
-ERR syntax error

我认为SET适用于任何键/值,并且可能是一个值可以是任何字符串......但不是带空格的字符串?这里的故事是什么?

3 个答案:

答案 0 :(得分:1)

好像您正在telnet中运行命令。基本上,redis基于低级文本协议实现基于文本的命令,请求/回复可能包含多个文本行,前缀为特殊字符(如$ *)或前缀为其长度的字符。

为方便起见,redis还支持内联命令

  

出于这个原因,Redis还以一种专为人类设计的特殊方式接受命令,并称为内联命令格式。 (见here

您键入的第一个命令是内联命令,它可以正常工作。第二个有空格,所以不是内联命令,然后坏了。

所以你可以使用内联命令发送带空格的set命令:

*3
$3
set
$8
billybob
$15
hey how are you
+OK

Reidis protocol documentation

答案 1 :(得分:1)

可能与版本有关。这有效:

$ redis-cli --version
redis-cli 2.8.3

$ redis-cli SET billybob "hey how are you"
OK

$ redis-cli GET billybob
"hey how are you"

@ JM3 请改用redis-cli的'-x'命令行选项。 请注意,它会在字符串末尾添加“\ n”:

$ echo "hey how are you"
hey how are you

$ echo "hey how are you" | redis-cli --pipe SET billybob
All data transferred. Waiting for the last reply...
ERR unknown command 'hey'
Last reply received from server.
errors: 1, replies: 1

$ echo "hey how are you" | redis-cli -x SET billybob
OK
$ redis-cli GET billybob
"hey how are you\n"

HTH

伯尼

答案 2 :(得分:0)

您可以尝试基于FastoRedisFastoNoSQL hiredisenter image description here