Memcached:可以连接但无法设置值

Memcached:可以连接但无法设置值

我使用 memcached 包在 Debian squeeze 上安装了 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.

答案1

鉴于以下示例另一个网站,我敢打赌你没有将 mykey 设置为你期望的值。因此你的 getkey 也失败了。先尝试获取密钥,或者尝试删除 mykey,然后使用提供的示例。

答案2

刚刚遇到这个错误,遗憾的是这里的回应不足以理解和解决问题。

由此文章(向下滚动到“使用 telnet 测试 memcached 守护进程”:

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

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

因此,当您看到此错误时,根本问题是您将值设置为大于您在 set 命令中分配的字节数。

在 OP 的案例中,分配了 5 个字节,但尝试设置的值是“get mykey”,其超过 5 个字节(并且还是一个语法错误,正如 OP 所述)。

希望这可以让其他像我一样的 memcached 新手在遇到此错误但不知道其含义时能够更清楚地了解。

相关内容