Я пытаюсь использовать memcached как с клиентом php (memcached), так и с клиентом C# (enyim). У меня есть сценарий, в котором я хочу получить значение CAS в php. Для этого я использую следующий код:
$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# C# имеет то же значение, все идет не так. Php выдает предупреждение по адресу:
$entries = $memcached->get($theKey, null, $cas);
а именно что:
PHP Warning: Memcached::get(): could not uncompress value in ... at line ...
И в результате возникает бесконечный цикл.
Сейчас попробовал получить ключ с memcached-сервера по телнету и данные тут же оказались. В php я также могу установить этот ключ без проблем.
Я заметил одну вещь: после того, как php-клиент что-то установил, флаг был равен 0. Теперь, после того как клиент C# получил значение CAS, флаг был 274. Происходит ли какое-то столкновение флагов в php-библиотеке? Или что-то еще?
Если кто-то может помочь мне решить эту проблему, я был бы благодарен!
лордстикс
[РЕДАКТИРОВАТЬ]
Ну тогда. Поскольку на этот вопрос нет ответа, позвольте мне выразиться по-другому. Есть ли способ помешать клиенту С# установить флаг 274?