PHP memcache 随着键数量的增加返回 false

标签 php memcached

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

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

每当我们尝试使用新代码时,系统在最初几秒钟(通常不到 10 秒)都运行良好。在最初的几秒钟之后,memcache 开始为每个请求(获取、设置、增量)返回“false”

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

我们的 memcached 服务器上的请求率约为每秒 270 个请求(使用旧代码)。使用新代码,预计每秒处理的请求数将超过 1000 个。

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

什么可能导致此行为?

最佳答案

看起来可能是压缩或序列化问题。我建议进行更多调试以查看确切的服务器响应。首先,尝试进行 telnet 并手动设置和获取 key :

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

用于协议(protocol)命令。

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

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/

关于PHP memcache 随着键数量的增加返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9920132/

相关文章:

php - magento 删除管理菜单项

php - 是否可以从一列中的 ID 组合中进行选择并显示每个 ID 名称?

javascript - 使用来自后端(PHP sodium)的公钥在前端(sodium-plus.js)加密

python - 如何使用flask-cache和memcached?

php Memcache 类找不到

performance - 证明 memcache 比文件系统缓存更快?

php - Yii2 从表单中获取用户输入

php - 通过 Cron 显示 PHP 脚本运行的次数

java - 谷歌应用引擎 : Memcache or Static variable?

c# - 通过 sql 表中的 100,000 条记录进行通配符搜索的最佳优化技术是什么