2011-05-04 6 views
4

집합을 사용할 수 있다면 PHP memcache의 대체 기능은 무엇입니까? 변수가 있더라도 set은 자동으로 바꿉니다.Memcache의 대체 기능은 무엇입니까?

세트 대신 교체를 사용하는 것이 더 나은 예가 있습니까?

감사합니다.

+0

글쎄, [매뉴얼 페이지] (http://php.net/memcached.replace)는 "Memcached :: replace()는 Memcached :: set()과 비슷하지만 키가 작동하면 작업이 실패합니다 서버에 존재하지 않습니다. " – Gumbo

답변

6

PHP.net에 따르면 이 http://www.php.net/manual/en/memcache.set.php

당신은 다음과 같이 표시됩니다 : 당신이 여기 코멘트를 보면

Memcached::replace() is similar to Memcached::set(), but the operation fails if the key does not exist on the server.

+0

'set '대신'replace'를 사용하는 것이 언제 더 좋은지에 대한 @ evening의 두 번째 질문을 설명 할 수 있습니까? –

+0

예를 들어 설명 할 수 없지만 replace()를 사용할 필요가 없습니다. – ZoFreX

4

이 ZoFreX의 대답에 이어

세트 더 사용 동일한 키에 대해 한 번 이상 사용하면 예기치 않은 결과가 발생합니다. 즉, "바꾸기"로 동작하지 않지만 대신 동일한 키에 대해 둘 이상의 값을 "설정"하는 것처럼 보입니다. 「get」는 임의의 값을 돌려줍니다.

다중 서버 설정에서 테스트되었습니다. 하나의 서버 만있는 경우 동작이 다를 수 있습니다. set() 단지 키를 추가하는 반면

는, 그래서 진실로 replace() 먼저 기존 키를 찾습니다하고 (있는 경우)를 교체하십시오. replace()을 먼저 사용하는 것이 가장 좋습니다. 키를 찾을 수없는 경우 FALSE을 반환한다고 생각하면 add()set()이 아닌 키가 존재하지 않음을 알고 있기 때문에 사용하게됩니다. 이렇게하면 의도하지 않은 사고가 발생하지 않습니다. 따라서 코드는 다음과 같을 수 있습니다.

$replace = Memcached::replace($key, $var); 
if (! $replace) 
{ 
    $set = Memcached::add($key, $var); 
} 
0

아니요.

값을 확인하고 설정하려면 GETS + CAS를 사용해야합니다.

+0

http://php.net/manual/en/memcached.cas.php – colllin

+0

이것을 사용하여 대체 방법을 설명하고 이것이 올바른 해결책 인 이유를 설명 할 수 있습니까? – colllin

+0

"그건 완전히 잘못되었습니다"라고 할 때 당신은 무엇을 언급하고 있습니까? – Barmar

1

일반적으로 키를 자주 사용하는 경우 대체해야합니다./etc를 설정/추가하면 아주 새로운 항목이 만들어지며 조각화와 많은 정리를 할 수 있습니다. Replace는 이미 할당 된 메모리를 재사용합니다 (가능한 경우). 더 안정적이고 효율적으로 수행 할 수 있습니다. 실패 할 경우 add/set을 사용하면 계속 작동합니다.

관련 문제