我在 PHP 中使用 Memcached 时遇到了一个错误。这是我的一段代码:
<?php
$mc = new \Memcached();
$mc->setOption(\Memcached::OPT_BINARY_PROTOCOL, true);
$mc->addServer("127.0.0.1", 11211);
$mc->touch("key", time() + 600);
$touchResult = $mc->getResultCode();
$mc->set("key", 1, time() + 600);
$setResult = $mc->getResultCode();
echo "<pre>";
echo "Touch result: $touchResult\n";
echo "Set result: $setResult\n";
echo "</pre>";
第一次运行时,输出如下:
Touch result: 16
Set result: 0
第二次:
Touch result: 0
Set result: 5
如果我错了,请纠正我,但这是一个错误,对吗?有谁知道这个的解决方法?
以下是我使用的版本:
- Ubuntu 12.04 64 位
- PHP 5.3.14
- memcached 2.1.0(PECL 模块)
- libmemcached 1.0.8
- Memcached 服务器 1.4.13
PS。如果您想知道结果代码的含义,它们是:
0 RES_SUCCESS
5 RES_WRITE_FAILURE
16 RES_NOTFOUND
[更新]
我对代码进行了更多尝试,并发现了一些更有趣的东西。无论如何都会发生此错误key
并且touch
正在set
处理中。只要touch
操作返回0
(这意味着它是成功的)set
操作就会失败。
[更新]
我也设法产生了一些其他错误。例如,key
从服务器获取一些然后add
ing 一些其他也会导致讨厌的问题(RES_END
代码)。我相信所有这些问题都与二进制协议有关。在我看来,二进制协议的实现似乎几乎不是稳定的。可以在没有二进制协议的情况下工作的操作会很好,但是一旦将协议设置为二进制,它们就会导致阻塞问题。