Разбираясь с библиотекой
Memcache для PHP, наткнулся на интересный
коммментарий: перед тем как делать
set() значения, которое уже могло существовать, необходимо сделать
replace(), т.к. якобы при работе с кластером memcached-серверов,
set() может установить несколько значений с одинаковыми ключами (полагаю, на разных нодах), и затем get может возвращать любое из этих значений.
Для того, чтобы избежать проблем, автор предлагает использовать код вида:
$result = $memcache->replace($key, $var); <br>
if( $result == false ) <br>
{ <br>
$result = $memcache->set($key, $var); <br>
} <br>
Данный подход активно используются, например, его можно встретить в memcached-обертке в
symfony.
Я могу представить, как в разных нодах могут появиться значения с одинаковыми ключами, но почему в этом дублировании ключей виноват
set() и как от этого может спасти
replace() — хоть убейте не пойму.
Как, по-вашему, такое может происходить? В чем принципиальное отличие
set() от
replace() в данном контексте?