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