【问题标题】:Memcached set() fails: WRITE FAILUREMemcached set() 失败:写入失败
【发布时间】: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 没有错误日志吗?它应该包含有关问题的更详细信息。
  • 嗨!你知道它发生的原因吗?

标签: php memcached


【解决方案1】:

我今天有the same problem

原来你需要使用 127.0.0.1 而不是 localhost。

真的很烦。

【讨论】:

  • 这对我有用。我的 php Memcached 类曾经使用“localhost”。新版本中是否有回归?
【解决方案2】:

听起来好像您正在达到 Memcached 的内存限制。你在写什么样的东西?它们有多大?

如果您的 Memcached 服务器已满或几乎已满,我什至可能会预料到会发生这种情况。

另一方面,请仔细检查您是否没有安装限速防火墙。也许它看到你在敲击你的 Memcached 盒子,然后吓坏了。

最后,确保在完成后关闭 Memcached 连接。如果你打开太多,事情就会变得丑陋。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-04
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 2011-04-20
    • 2018-06-02
    相关资源
    最近更新 更多