PHP memcache返回false,键数增加

时间:2012-03-29 06:26:35

标签: php memcached

我们正在使用PHP并使用memcached v1.4.6进行缓存。我们正在使用PECL的memcache扩展memcache-2.2.6。我们使用持久连接来连接到memcached。

最近我们进行了一些更改,使memcached中存储的密钥数量增加了一倍。这些键最长为75到80个字符。存储的值是整数。

每当我们尝试使用新代码时,系统在前几秒(通常少于10秒)内正常工作。在最初的几秒钟之后,memcache开始为每个请求(get,set,increment)返回“false”

如果在这个阶段我们恢复旧代码,事情就会再次开始正常工作。

我们的memcached服务器上的请求率大约是每秒270个请求(使用旧代码)。预计新代码将增加到每秒1000多个请求。

当memcache开始返回“false”时,大约15%的已分配内存是空闲的。

可能导致此行为的原因是什么?

1 个答案:

答案 0 :(得分:2)

看起来它可能是压缩或序列化问题。我建议做更多的调试,看看确切的服务器响应。首先,尝试使用telnet并设置并手动获取密钥:

telnet a.b.c.d 11211
SET key_name 0 300 3
123
STORED
GET a
VALUE a 0 3
123
END

见:

http://code.google.com/p/memcached/wiki/NewCommands http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt

用于协议命令。

如果一切顺利,您可以尝试在服务器上使用监视器来查看正在执行的命令:

telnet a.b.c.d 11211
STATS detail on
//wait a while
STATS detail off
STATS detail dump
//list of commands will be dumped

您可以通过php.ini中的运行时配置稍微调整库:

http://www.php.net/manual/en/memcache.ini.php

也许你可以查看PHP的Memcached(注意D)库作为替代。

另外,一个好的监控工具:

http://code.google.com/p/phpmemcacheadmin/