我刚刚启动了 Redis 并正在使用它。以下工作正常:
SET billybob "hello"
+OK
但是,以下失败:
SET billybob "hey how are you"
-ERR syntax error
我认为 SET 适用于任何键/值,并且可能一个值可以是任何字符串......但不是带空格的字符串?这里有什么故事?
也许它与版本有关。这在这里有效:
$ 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"
高温高压
伯尼
看来您正在 telnet 中运行命令。基本上,redis 基于低级文本协议实现基于文本的命令,请求/回复可能包含多个文本行,前缀为特殊字符,如 $ *,或前缀为长度的字符。
而且为方便起见,redis 还支持内联命令:
出于这个原因,Redis 还以一种专为人类设计的特殊方式接受命令,称为内联命令格式。(见这里)
您键入的第一个命令是内联命令,它可以工作。第二个有空格,所以不是内联命令,然后坏了。
因此,您可以使用内联命令发送带有空格的 set 命令:
*3
$3
set
$8
billybob
$15
hey how are you
+OK