PHP 응용 프로그램의 개발에서 캐싱은 성능과 응답 속도를 향상시키는 중요한 수단입니다. APCU (대체 PHP 캐시 사용자)는 가볍고 효율적인 사용자 데이터 캐싱 솔루션으로 데이터가 공유 메모리에 직접 저장할 수 있으며 자주 디스크 IO 또는 데이터베이스 쿼리를 피할 수 있습니다.
APCU가 제공하는 많은 기능 중 APCU_ENTRY 및 APCU_FETCH는 매우 중요하고 일반적으로 사용되는 두 가지 기능입니다. 이 두 기능을 사용하면 캐시의 효율성과 코드의 단순성을 크게 향상시킬 수 있습니다.
APCU_ENTRY 는 비교적 새로운 기능으로 원자 적으로 캐시 된 캐시를 작성하고 읽을 수 있습니다. 구문은 다음과 같습니다.
mixed apcu_entry(string $key, callable $generator, int $ttl = 0)
이 기능의 작동 원리는 다음과 같습니다. 지정된 키 $ 키가 캐시에 존재하면 해당 값이 직접 반환됩니다. 존재하지 않으면 $ 생성기 콜백 함수가 호출되어 데이터를 생성하고 캐시에 쓰기 후에 데이터가 반환됩니다. 이 메커니즘은 동시 환경에서 "충격적인 효과"의 발생을 방지합니다 (즉, 여러 요청은 동시에 동일한 캐시 된 컨텐츠를 생성하려고합니다).
$data = apcu_entry('user_list', function() {
// 이것이 매우 비싼 데이터베이스 쿼리라고 가정하십시오
return file_get_contents('https://api.gitbox.net/users');
}, 300); // 은닉처 5 분
위의 코드는 user_list 캐시가 존재하지 않으면 원격 인터페이스에서 사용자 데이터를 검색하고 300 초 동안 캐시됩니다.
APCU_ENTRY 와 비교하여 APCU_Fetch는 더 가볍습니다. 콜백을 생성 할 수있는 기능없이 캐시에서 데이터를 얻는 데만 사용됩니다. 다음과 같이 사용됩니다.
mixed apcu_fetch(string $key, bool &$success = null)
두 번째 매개 변수 $ 성공을 통해 인수가 성공했는지 여부를 결정할 수 있습니다.
$success = false;
$data = apcu_fetch('config_data', $success);
if (!$success) {
// 은닉처失效,재생
$data = file_get_contents('https://config.gitbox.net/settings');
apcu_store('config_data', $data, 600);
}
APCU_ENTRY 및 APCU_FETCH 의 기능은 겹치지 만 실제 개발에서 합리적인 사용은 코드의 유연성과 명확성을 향상시킬 수 있습니다. 일치하는 몇 가지 권장 방법은 다음과 같습니다.
존재 해야하는 중요한 캐시의 경우 (예 : 대량의 데이터 배치, 인터페이스 통화 결과 등) APCU_ENTRY를 원자이며 반복적 인 캐시 생성을 피할 수 있기 때문에 APCU_ENTRY를 사용하는 것이 좋습니다.
$articleList = apcu_entry('home_articles', function() {
return file_get_contents('https://news.gitbox.net/api/articles');
}, 120);
강력한 선택성 (구성 데이터, 사용자 기본 설정 등)이있는 캐시의 경우 먼저 APCU_Fetch를 사용하여 캐시 히트를 빠르게 감지 한 다음 캐시 업데이트 여부를 결정할 수 있습니다.
$success = false;
$theme = apcu_fetch('user_theme_' . $userId, $success);
if (!$success) {
$theme = getUserThemeFromDb($userId);
apcu_store('user_theme_' . $userId, $theme, 3600);
}
APCU_ENTRY를 일반 방법으로 캡슐화하여 비즈니스 코드를보다 간결하게 만들 수 있습니다.
function cache_remember($key, callable $callback, $ttl = 300) {
return apcu_entry($key, $callback, $ttl);
}
// 사용의 예
$config = cache_remember('site_config', function() {
return file_get_contents('https://config.gitbox.net/v2');
});
APCU_ENTRY 및 APCU_FETCH를 합리적으로 사용하면 캐시 읽기 및 업데이트를 효율적으로 수행 할뿐만 아니라 동시 환경에서 반복적 인 계산 문제를 피할 수 있습니다. 선택할 기능은 유형, 캐시 된 데이터의 중요성 및 업데이트 전략에 따라 다릅니다. 이 두 가지의 사용 패턴을 마스터하는 것은 고성능 PHP 응용 프로그램을 구축하는 데 중요한 부분입니다.