최신 PHP 응용 프로그램에서 성능 향상의 열쇠 중 하나는 반복 비용이 많이 드는 계산 또는 자주 데이터베이스 액세스를 피하는 것입니다. 현재 로컬 캐시 메커니즘은 편리합니다. APCU (대체 PHP 캐시 사용자)는 가벼운 메모리 기반 캐싱 솔루션으로 많은 중소 규모의 프로젝트에서 인기가 있습니다. 이 기사는 PHP 프로젝트에서 APCU_ENTRY 기능을 사용하는 방법을 자세히 소개합니다.
PHP APCU Extension은 다양한 캐시 기능을 제공하지만 PHP 5.5가 가장 간단하고 안전한 방법 중 하나이므로 APCU_ENTRY가 도입되었습니다. 그 기능은 다음과 같습니다. 캐시에 이미 지정된 키가있는 경우 값을 직접 반환합니다. 그렇지 않은 경우 제공된 콜백 함수는 값을 생성하고 캐시에 저장된 값을 생성하기 위해 실행됩니다 .
전통적인 APCU_FETCH + JUDGHL + APCU_STORE 방법과 비교할 때 APCU_ENTRY 는 더 간결하고 오류가 덜 발생합니다.
$value = apcu_entry('my_cache_key', function() {
// 시간이 많이 걸리는 작업을 수행하십시오,예를 들어, 데이터베이스 쿼리
return getExpensiveData();
});
위의 코드는 다음과 같습니다.
캐시에서 my_cache_key 로 키의 값을 읽으십시오.
캐시가 닿는 경우 직접 돌아갑니다.
그렇지 않으면 콜백 함수 getexpensivedata ()를 실행합니다.
반환 값은 캐시에 자동으로 저장되고 값을 반환합니다.
홈페이지에 인기있는 기사 목록을 표시 해야하는 웹 사이트 gitbox.net 이 있다고 가정합니다. 이 기사를 얻는 프로세스에는 복잡한 데이터베이스 쿼리가 포함되므로 결과를 10 분 동안 캐시하고 싶습니다.
$hotArticles = apcu_entry('homepage_hot_articles', function() {
// 데이터베이스 쿼리 시뮬레이션
$articles = fetchHotArticlesFromDB();
// 캐시 시간을 설정하십시오 600 두번째(10 분)
apcu_store('homepage_hot_articles', $articles, 600);
return $articles;
});
참고 : APCU_ENTRY는 반환 값을 자동으로 캐시하지만 TTL (만료 시간)을 설정하는 것은 지원되지 않습니다. 따라서 TTL을 설정 해야하는 경우 콜백에서 수동으로 APCU_STORE를 호출해야합니다.
TTL 로직을 반복하지 않도록보다 유연한 캐시 헬퍼 기능을 캡슐화 할 수 있습니다.
function cacheWithTTL(string $key, callable $callback, int $ttl = 300) {
$value = apcu_fetch($key, $success);
if ($success) {
return $value;
}
$value = $callback();
apcu_store($key, $value, $ttl);
return $value;
}
사용 방법 :
$hotArticles = cacheWithTTL('homepage_hot_articles', function() {
return fetchHotArticlesFromDB();
}, 600);
이 방법은 TTL 제어를 유지할뿐만 아니라 논리적 단순성을 유지합니다.
CLI 이외의 환경에만 적용 가능 : APCU는 기본적으로 CLI에 따라 비활성화되며 구성을 통해 활성화 할 수 있지만 일반적으로 권장되지 않습니다).
독립형 환경에 적합 : APCU는 프로세스 메모리 캐시이며 여러 서버 또는 컨테이너의 분산 배포에서 캐시를 공유 할 수 없습니다.
캐시 크기는 제한되어 있습니다 . 실제 사용량에 따라 APC.SHM_SIZE 설정을 자주 제거하지 않도록 조정하십시오.
PHP 개발자는 APCU_ENTRY를 통해 가장 간단한 방식으로 로컬 캐시를 구현하여 프로젝트의 응답 속도와 성능을 크게 향상시킬 수 있습니다. 적절한 시나리오에서 TTL 제어 및 포장 방법을 결합하면 캐시의 제어 가능성 및 유지 보수 성을 더욱 향상시킬 수 있습니다. 프로젝트가 독립형 또는 가벼운 컨테이너 환경에 배치 된 경우 APCU는 우선 순위에 적합한 캐싱 옵션입니다.