2015-08-10 6 views
-1

Интересно, какой пример реальной жизни, который мне нужен для использования функции apc_cas в PHP.Каково реальное использование функции apc_cas()?

+0

Это изменение переменной кэша новой, но я также видел в комментариях для apc_store: Примечание. Версия APC 3.1.3 содержит ошибку (http://pecl.php.net/bugs/bug.php?id = 16814), который будет отображать предупреждение об отказе кэша для всех записей в существующем кэше var. Я предполагаю, что использование этой функции не вызовет этого предупреждения –

+0

Ссылка Hope поможет вам: http://www.cnblogs.com/argb/p/3604344.html –

ответ

0

Простым примером является счетчик. Предположим, у нас есть ключ counter и функцию, которая увеличивает счетчик (обратите внимание, что это будет лучше всего подходит для функции apc_inc, но давайте играть вместе):

function incCounter(){ 
    //Get the current value increment and set 
    $c = apc_fetch('counter'); 
    $c++; 
    apc_store('counter',$c); 
} 

Однако выше имеет проблему. Если одновременно выполняются два запроса, оба будут получать одинаковое значение $c и увеличивать его, что означает, что счетчик будет только увеличиваться на единицу.

Использование apc_cas однако давайте вам гарантировать, что значение, которое вы обновляете, является старым и что оно не было изменено в то же время.

0

Обеспечивает, что никто больше не обновляет значение в этом ключе. По этой причине вам нужно передать значение $ old. Если текущее значение отличается от вашего знания значения ключа (в данном случае $ old), ключ не будет обновляться, а false возвращается.

Реализация http://en.wikipedia.org/wiki/Compare-and-swap, обычно используемая в базах данных магазинов ключей.