【发布时间】:2011-07-29 23:04:25
【问题描述】:
我正在尝试将 memcached 与 php (memcached) 和 C# (enyim) 客户端一起使用。 我有一个场景,我想在 php 中 CAS 一个值。为此,我使用以下代码:
$memcached = new Memcached;
$memcached->addServer('localhost', 11211) or die ("Could not connect");
$memcached->setOption(Memcached::OPT_COMPRESSION, false); // the enyim client doesn't support compression
do {
$entries = $memcached->get($theKey, null, $cas);
if ($memcached->getResultCode() == Memcached::RES_NOTFOUND) {
$entry = somearray("foo");
$memcached->add($theKey, $entry);
} else {
$entries[] = "bar";
$memcached->cas($cas, $theKey, $entries);
}
}
while ($memcached->getResultCode() != Memcached::RES_SUCCESS AND $memcached->getResultCode() != Memcached::RES_END);
这一切都很好,一开始就很好。 但是,当 C# 客户端 CAS 的值相同时,它就会出错。 php 在以下位置发出警告:
$entries = $memcached->get($theKey, null, $cas);
即:
PHP Warning: Memcached::get(): could not uncompress value in ... at line ...
结果出现无限循环。
现在我尝试通过 telnet 从 memcached 服务器获取密钥,并且数据就在那里。 在 php 中,我也可以毫无问题地设置这个键。
我注意到一件事:在 php 客户端设置了某些东西之后,标志为 0。 现在,在 C# 客户端对值进行 CAS 处理后,标志为 274。 php lib上是否有一些标志冲突?还是别的什么?
如果有人能帮我解决这个问题,我将不胜感激!
王者荣耀
[编辑]
那好吧。由于这个问题没有得到答案,所以让我换一种说法。 有没有办法阻止 C# 客户端设置标志 274?
【问题讨论】:
-
我遇到了完全相同的问题。你找到解决办法了吗?
-
哇,这几乎是一年前的事了。请参阅我发布的答案,因为它涉及一些编辑。
-
@GRaecuS 忘记提及你的名字了!
标签: c# php memcached flags collision