Зачем делать replace() перед set() в Memcache?

Разбираясь с библиотекой 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() в данном контексте?
  • Вопрос задан
  • 4134 просмотра
Пригласить эксперта
Ответы на вопрос 2
Anonym
@Anonym
Программирую немного )
Вы говорите про Memcache или про Memcached? Это разные библиотеки и в Memcache действительно есть какой-то глюк с сеттерами. Попробуйте Memcached.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы