Memcached:如何在检索所有密钥时解除限制

时间:2016-04-02 20:58:55

标签: php memcached

由于我无法在网络中找到任何可靠程序,一旦平板中的密钥计数>检索到所有memcache密钥。 500k我想用PHP编写自己的程序。

然后我意识到为什么所有的程序都没有真正适用于这么多的密钥。

当我用stats cachedump <slab-id> <limit>读取密钥时,它只返回一定数量的密钥 - 在我的情况下 - 以大约30k结束。

我怎样才能获得至少这500k可能在一块平板上?

所有&#34;帖子&#34;和&#34;答案&#34;建议使用memdump不起作用。他们也有这个限制。

我正在使用memcached 1.4.25

1 个答案:

答案 0 :(得分:4)

调试memcached来源后,我意识到此行造成的限制是items.c / item_cachedump()

unsigned int memlimit = 2 * 1024 * 1024;   /* 2MB max response size */

由于此分配,分配的缓冲区限制了返回键的数量,因为所有键的总长度[包括每个键名后的\r\n] 不得超过此大小。< / p>

我可以通过这种方式解决我的问题,我将其更改为:

unsigned int memlimit = 128 * 1024 * 1024;

并重新编译memcached。现在我可以阅读大约700k键[我没有更多键来最大化功能]。

我发现非常高的值会使系统不稳定。值500 * 1024 * 1024 [e.q. 500MB]我的系统几乎崩溃了这条消息:

  

shell-init:检索当前目录时出错:getcwd:无法访问   父目录:没有这样的文件或目录

即使我的服务器有5GB RAM,我也不明白为什么,但最后128 MB的值是可用值。

我要求memcached developer team添加一个可以在命令行中设置值的开关。