6

我刚刚启动了 Redis 并正在使用它。以下工作正常:

SET billybob "hello"
+OK

但是,以下失败:

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

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

4

2 回答 2

2

也许它与版本有关。这在这里有效:

$ 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"

高温高压

伯尼

于 2014-01-09T21:15:29.167 回答
1

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

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

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

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

因此,您可以使用内联命令发送带有空格的 set 命令:

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

Reidis 协议文档

于 2013-07-27T06:04:46.267 回答