APC에서 변수를 업데이트하려고하는데,이를 시도하는 많은 프로세스가있을 것입니다.
APC는 잠금 기능을 제공하지 않으므로 다른 메커니즘 사용을 고려하고 있습니다 ... 지금까지 찾은 것은 mysql의 GET_LOCK () 및 php의 flock ()입니다. 고려해야 할 다른 것이 있습니까?
업데이트 : sem_acquire를 찾았지만 차단 잠금 인 것 같습니다.
- 답변 # 1
- 답변 # 2
파일 시스템이나 mysql에 의존하지 않고 apc_add 함수를 사용하여이를 달성 할 수 있습니다. 와이즈 비즈 변수가 아직 저장되지 않은 경우에만 성공합니다. 따라서, 잠금 메커니즘을 제공한다. TTL을 사용하면 고정 된 잠금 장치가 잠금 장치를 계속 유지하지 않아도됩니다.
apc_add
이유 올바른 해결책은 잠금 확인과 '잠금 설정'사이에 존재하는 경쟁 조건을 피하기 때문입니다.apc_add
이후 이미설정되지 않은 경우에만 값을 설정하고 (캐시에 "추가"), 시간의 근접성에 관계없이 한 번에 두 번의 호출로 잠금을 획득 할 수 없도록합니다.와를 동시에 확인하지 않는 솔루션은 본질적으로이 경쟁 조건을 겪게됩니다. 경쟁 조건없이 성공적으로 잠 그려면 한 번의 원자 작업이 필요합니다.APC 잠금은 해당 PHP 실행 환경에서만 존재하므로 호스트 간 잠금을 지원하지 않기 때문에 일반 잠금에 가장 적합한 솔루션은 아닙니다. 와이즈 비즈 또한 원자 추가 기능을 제공하므로 호스트 간 잠금 방법 중 하나 인이 기술과 함께 사용할 수도 있습니다. 와이즈 비즈 또한 원자 적 'SETNX'기능 및 TTL을 지원하며 호스트 간의 잠금 및 동기화에 매우 일반적인 방법입니다. 그러나 OP는 특히 APC에 대한 솔루션을 요청합니다.
- 답변 # 3
잠금 시점에서 여러 프로세스가 빈 캐시 키를 채우지 못하게하려면 차단 잠금을 원하지 않는 이유는 무엇입니까?
apc_add
캐시가 좋으면 그냥 롤백하십시오. 캐시에 아무것도 없으면 잠금을 얻습니다. 잠금이 설정되면 잠금을 얻기 위해 대기하는 동안 캐시가 다시 채워지지 않았는지 캐시를 다시 확인해야합니다. 캐시가 다시 채워지면 해당 값을 사용하고 잠금을 해제하십시오. 그렇지 않으면 계산을 수행하고 캐시를 채우고 잠금을 해제하십시오.
- 답변 # 4
실제로 이것이 Peter의 것보다 잘 작동하는지 확인하십시오. 제안.
http://us2.php.net/flock
독점 잠금 장치를 사용하고 편안하게 사용하려면 파일을 잠 그려는 다른 모든 항목을 2-3 초 동안 잠자십시오. 올바르게 수행하면 사이트에 잠긴 리소스에 관한 중단이 발생하지만 동일한 것을 캐시하기 위해 싸우는 수많은 스크립트는 발생하지 않습니다.
- 답변 # 5
파일 시스템에 잠금을 설정하는 것이 마음에 들지 않으면 'x'모드의 fopen (). 예를 들면 다음과 같습니다.
Memcache
www.php.net/fopen 참조
Redis
관련 자료
- PHP에서 문자열을 자르는 가장 좋은 방법
- javascript - 작성하는 가장 좋은 방법은 무엇입니까? NodeJS
- hosting - Apple App Site Association 파일을 호스팅하는 가장 좋은 방법은 무엇입니까?
- ruby on rails - 인수를 사용하여 메일러를 테스트하는 가장 좋은 방법
- database - firestore로 사용자 등급을 얻는 가장 좋은 방법은?
- oop - UML 컴포넌트를 C ++에 맵핑하는 가장 좋은 방법은 무엇입니까?
- javascript - JS에서 시간을 정상화하는 가장 좋은 방법
- spring boot - Cassandra에서 데이터를 마이그레이션하는 가장 좋은 방법은 무엇입니까
- javascript - 값으로 항목의 키를 찾는 가장 좋은 방법
- calendar - 안드로이드에서 오랫동안 타임 스탬프를 얻는 가장 좋은 방법은 무엇입니까?
- c - recv ()로 패킷 크기를 결정하는 가장 좋은 방법은 무엇입니까?
- javascript - 데이터가 존재하는지 여부를 렌더링하는 가장 좋은 방법은 무엇입니까?
- arrays - C의 사용자 입력 문자열을 읽는 가장 좋은 방법은 무엇입니까?
- filestream - C #의 디스크에서 짧은 배열을 읽는 가장 좋은 방법은 무엇입니까?
- python - 이 패턴을 인식하는 가장 좋은 방법은?
- python - API에서 BigQuery로 데이터를로드하는 가장 좋은 방법
- Net Core Web API에 게시하는 가장 좋은 방법
- python - PD 시리즈를 왕복하는 가장 좋은 방법
- php - 같은 종류의 여러 입력에서 같은 형식으로 데이터를 게시하는 가장 좋은 방법은 무엇입니까?
- mysql - 마지막 N 행을 특정 열로 유지하는 가장 좋은 방법
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- JavaScript 변수를 HTML div에 '출력'하는 방법
- javascript - swiperjs에서 정지, 재생 버튼 추가
- python - 문자열에서 특정 문자 제거