Какой смысл использовать функцию замены в Memcache? - PullRequest
4 голосов
/ 05 мая 2011

Какой смысл заменить функцию в PHP memcache, если вы можете просто использовать set?Даже если есть переменная, set автоматически заменяет ее, верно?

Можете ли вы привести пример, где лучше использовать замену вместо set?

Спасибо.

Ответы [ 4 ]

4 голосов
/ 27 сентября 2013

Исходя из ответа ZoFreX, если вы посмотрите на комментарии здесь: http://www.php.net/manual/en/memcache.set.php

Вы увидите следующее:

Использование набора более одного раза для одного и того же ключа кажетсяиметь неожиданные результаты - он не ведет себя как «замена», а вместо этого «устанавливает» более одного значения для одного и того же ключа.«get» может вернуть любое из значений.

Это было проверено на установке с несколькими серверами - поведение может отличаться, если у вас только один сервер.

Так что действительно и верно replace() сначала будет искать существующий ключ, а затем заменить его (если он существует), тогда как set() просто добавит ключ.Я полагаю, что всегда лучше сначала использовать replace(), учитывая, что он возвращает FALSE, если ключ не найден, и в этом случае вы будете использовать add() вместо set(), поскольку вы точно знаете, что ключ не существует,Это гарантирует, что у вас не будет никаких непреднамеренных неудач.Таким образом, ваш код может быть что-то вроде:

$replace = Memcached::replace($key, $var);
if ( ! $replace)
{
    $set = Memcached::add($key, $var);
}
1 голос
/ 21 июля 2017

Как правило, следует использовать замену, если ключ часто используется. Set / add / etc создает новую запись и может привести к фрагментации и большой очистке. Замена повторно использует уже выделенную память (если это возможно) и может быть более стабильной и эффективной. Если это не удастся, использование add / set все равно будет работать.

0 голосов
/ 08 мая 2014

Нет, это совершенно неправильно.

Если вы хотите проверить и установить значение, вы должны использовать GETS + CAS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...