Интересно, какой пример реальной жизни, который мне нужен для использования функции apc_cas
в PHP.Каково реальное использование функции apc_cas()?
ответ
Простым примером является счетчик. Предположим, у нас есть ключ counter
и функцию, которая увеличивает счетчик (обратите внимание, что это будет лучше всего подходит для функции apc_inc
, но давайте играть вместе):
function incCounter(){
//Get the current value increment and set
$c = apc_fetch('counter');
$c++;
apc_store('counter',$c);
}
Однако выше имеет проблему. Если одновременно выполняются два запроса, оба будут получать одинаковое значение $c
и увеличивать его, что означает, что счетчик будет только увеличиваться на единицу.
Использование apc_cas
однако давайте вам гарантировать, что значение, которое вы обновляете, является старым и что оно не было изменено в то же время.
Обеспечивает, что никто больше не обновляет значение в этом ключе. По этой причине вам нужно передать значение $ old. Если текущее значение отличается от вашего знания значения ключа (в данном случае $ old), ключ не будет обновляться, а false возвращается.
Реализация http://en.wikipedia.org/wiki/Compare-and-swap, обычно используемая в базах данных магазинов ключей.
Это изменение переменной кэша новой, но я также видел в комментариях для apc_store: Примечание. Версия APC 3.1.3 содержит ошибку (http://pecl.php.net/bugs/bug.php?id = 16814), который будет отображать предупреждение об отказе кэша для всех записей в существующем кэше var. Я предполагаю, что использование этой функции не вызовет этого предупреждения –
Ссылка Hope поможет вам: http://www.cnblogs.com/argb/p/3604344.html –