Memcached:可以连接,但不可能设置值

我使用memcached软件包在Debian上安装了memcached。 memcached实例以384 MB开始。 然后我尝试连接:

jcisio@cecile:~$ telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. set mykey 0 60 5 get mykey CLIENT_ERROR bad data chunk ERROR stats items END 

这是什么意思? 通常get mykey应该返回5。

stats命令给出

 STAT pid 5456 STAT uptime 21334 STAT time 1326180707 STAT version 1.4.5 STAT pointer_size 64 STAT rusage_user 0.168010 STAT rusage_system 0.204012 STAT curr_connections 5 STAT total_connections 9 STAT connection_structures 6 STAT cmd_get 0 STAT cmd_set 1 STAT cmd_flush 0 STAT get_hits 0 STAT get_misses 0 STAT delete_misses 0 STAT delete_hits 0 STAT incr_misses 0 STAT incr_hits 0 STAT decr_misses 0 STAT decr_hits 0 STAT cas_misses 0 STAT cas_hits 0 STAT cas_badval 0 STAT auth_cmds 0 STAT auth_errors 0 STAT bytes_read 184 STAT bytes_written 2463 STAT limit_maxbytes 402653184 STAT accepting_conns 1 STAT listen_disabled_num 0 STAT threads 4 STAT conn_yields 0 STAT bytes 0 STAT curr_items 0 STAT total_items 0 STAT evictions 0 STAT reclaimed 0 END 

服务器日志与-vv:

 <27 server listening (udp) <28 new auto-negotiating client connection 28: Client using the ascii protocol <28 set mykey 0 60 5 >28 CLIENT_ERROR bad data chunk <28 ey >28 ERROR <28 stats items <28 quit <28 connection closed. 

考虑到另一个网站的例子,我敢打赌,你没有把mykey设置为你所期望的值。 因此,你的getkey也失败了。 先尝试获取密钥,或尝试删除密钥,然后使用提供的示例。

刚刚遇到这个错误,可悲的是这里的回答不足以理解和解决问题。

从这篇文章 (向下滚动到“用telnettestingmemcached守护进程”:

 set <key> <flag> <exptime> <bytes>\r\n 

该标志是您可以在客户端逻辑中使用的任意数字。 它旨在成为可以分配给每个caching对象的元数据。 在这个例子中,它被显示为1,但是在这里没有意义。 我将exptime设置为零(永不过期), 将字节设置为我要存储的字符数。 请注意,在最后一个例子中,如果字节数和字符数不匹配,则会发生错误。

所以当你看到这个错误的时候,根本问题是你设置的值大于你在set命令中分配的字节数。

在OP的情况下,分配了5个字节,但试图设置的值是大于5个字节的“get mykey”(并且如OP所述,也是语法错误)。

希望这个对于像我这样的其他memcached新手来说更加清晰,当他们遇到这个错误时,并不知道这意味着什么。