원자 단위로이 작업을 수행 할 수 있습니까?PHP APC가 원자 적으로 값을 가져오고 설정합니다.
$myvalue = apc_get("mykey");
apc_store("mykey",0);
// log/deal with myvalue
"mykey"는 다른 프로세스에서 자주 증가하고 있으며, 이들을 놓치고 싶지 않습니다.
원자 단위로이 작업을 수행 할 수 있습니까?PHP APC가 원자 적으로 값을 가져오고 설정합니다.
$myvalue = apc_get("mykey");
apc_store("mykey",0);
// log/deal with myvalue
"mykey"는 다른 프로세스에서 자주 증가하고 있으며, 이들을 놓치고 싶지 않습니다.
원하는 기능은 apc_cas()입니다. 'cas'는 '비교 및 교환'의 약자입니다. 캐시에서 값을 저장하지만 마지막으로 가져온 이후로 변경되지 않은 경우에만 캐시에 값을 저장합니다. 함수가 실패하면 캐시 된 값을 다시 페치하고 다시 저장하려고합니다. 이렇게하면 변경 내용을 건너 뛰지 않습니다.
카운터를 원자 적으로 증가 시키려고한다고 가정 해 봅시다. 이 기술은 다음과 같습니다 그냥 그렇게, APC는 이에 대한 전문 증가 기 및 decrementer을 제공 apc_inc() 및 apc_dec()을 발생
apc_add('counter', 0); // set counter to zero, only if it does not already exist.
$oldVar = apc_fetch('counter'); // get current counter
// do whatever you need to do with the counter ...
// ... when you are ready to increment it you can do this
while (apc_cas('counter', $oldVar, intval($oldVar)+1) === false) {
// huh. Someone else must have updated the counter while we were busy.
// Fetch the current value, then try to increment it again.
$oldVar = apc_fetch('counter');
}
.
Memcache에는 정수가 아닌 값에도 사용할 수있는 cas()이 있습니다.
귀하의 대답은 오해의 소지가 있습니다. apc_cas는 정수 이외에는 작동하지 않습니다. – Stephen
문서를 읽은 후에는 완전히 옳습니다. 나는 memcache의'cas()'함수를 생각하고 있었는데, 함수 서명이 조금 다르긴하지만 어떤 값이라도 좋다. 고정 포스트 ... – slashingweapon
반전 투표 :-) – Stephen
달성하려는 목표가 확실하지 않습니다. 항상 0으로 설정하려고합니다. 그렇다면 왜 그것을 저장 하는가? – Rob