【发布时间】:2011-01-17 18:30:27
【问题描述】:
所以 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”呢?
即使是我刚刚写入内存缓存的键也会发生这种情况。我将某些内容缓存了 24 小时,但在一分钟内我得到了“null”。 Memcache 甚至没有 50% 满,所以没有理由清除键,即使它们被清除,它们也应该返回为 false 而不是 null。
还有其他人遇到过这个问题吗?
【问题讨论】:
-
只是为了安全起见:您已经两次/三次检查了您 add() 的数据不只是空?
-
是的,当然,调试每一步的所有细节,一些键返回值一些空值。
-
memcache 没有错误日志吗?它应该包含有关问题的更详细信息。
-
嗨!你知道它发生的原因吗?