因此Memcached无法编写某些键,getResultMessage()表示WRITE FAILURE
我在设置中使用它:
$this->mmcache = new Memcached();
$this->mmcache->addServer('localhost',11211, 100);
$this->mmcache->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
$this->mmcache->setOption(Memcached::OPT_SERIALIZER, Memcached::SERIALIZER_IGBINARY);
$this->mmcache->setOption(Memcached::OPT_COMPRESSION, false);
有些按键每次都有效,有些按键每次都失败。我甚至尝试过base64编码键,但无论如何它们都会失败,甚至像
那样简单for($i=1;$i<100;$i++) {
$this->mmcache->set('testkey'.$i,$i*100,600);
}
每次都会返回WRITE FAILURE
。
禁用二进制协议只会将错误更改为HOSTNAME LOOKUP FAILURE
,但是50%的密钥仍然可以正常工作,我只是无法确定哪些将会起作用,哪些不起作用。
抱歉,我之前提出了错误的问题。
原始问题: v1.4.4中的Memcache返回NULL
我正在从php中存储和读取memcache中的大量数据。我正在使用常规连接到在localhost上运行的memcache服务器。我正在使用Memcache 1.4.4
但是,在一个脚本运行中我从memcache读取的50-60个键中,超过50%的键返回null
。根据php.net,当密钥不存在或过期时,Memcache::get()
应该返回false。那么为什么它会返回“null”?
即使是我刚写入memcache的密钥也会发生这种情况。我缓存了24小时的东西,一分钟后我得到了“空”。 Memcache甚至不是50%已满,所以没有理由清除密钥,即使它们是,它们应该返回为假而不是空。
还有其他人遇到过这个问题吗?
答案 0 :(得分:3)
答案 1 :(得分:2)
听起来好像你正在达到Memcached的内存限制。你在写什么样的东西?他们有多大?
如果Memcached服务器已满或几乎已满,我甚至可能会发生这种情况。
另一方面,请仔细检查您是否安装了速率限制防火墙。也许它会看到你敲打着你的Memcached盒子并且吓坏了。
最后,确保在完成后关闭Memcached连接。如果你留下太多开放的东西,那就太难了。