APCU_ENTRY 는 APCU Extension의 캐시 데이터에 대한 고급 인터페이스입니다. 그 기능은 캐시에서 지정된 키를 찾는 것입니다. 키가 존재하면 해당 캐시 값을 반환합니다. 존재하지 않으면 데이터는 콜백 함수를 통해 생성되고 캐시에 기록되며 데이터가 동시에 반환됩니다.
기능 프로토 타입은 다음과 같습니다.
mixed apcu_entry ( string $key , callable $generator [, int $ttl = 0 ] )
$ 키 : 캐시 항목의 키 이름.
$ Generator : 캐시 된 데이터를 생성하는 콜백 함수 (캐시가 존재하지 않을 때 호출).
$ ttl : 캐시 된 생존 시간, 단위는 초이며 기본값은 영구 캐시 (0)입니다.
기존 캐시 쓰기 프로세스는 일반적으로 APCU_Exists를 사용하여 캐시가 존재하는지 확인한 다음 APCU_Fetch를 호출하여 캐시를 얻습니다. 캐시가 존재하지 않으면 함수를 호출하여 데이터를 생성하고 마지막으로 캐시에 작성하십시오. 이 프로세스에는 레이스 조건과 불필요한 캐시 액세스가 있습니다.
APCU_ENTRY는 쿼리 및 쓰기 프로세스를 원자 운영으로 결합하여 여러 판단 및 인종 조건을 피하고 캐시 된 읽기 및 쓰기를보다 효율적이고 안전하게 작성합니다.
데이터베이스를 쿼리하는 데 속도가 느리고 캐시를 통해 성능을 향상시키기를 희망하는 사용자 정보를 얻기 위해 getUserInfofromdb () 가 기능이 있다고 가정합니다.
function getUserInfoFromDb($userId) {
// 시간이 많이 걸리는 데이터베이스 쿼리 시뮬레이션
sleep(2);
return [
'id' => $userId,
'name' => '사용자' . $userId,
'email' => 'user' . $userId . '@gitbox.net'
];
}
function getUserInfo($userId) {
$cacheKey = 'user_info_' . $userId;
// 사용 apcu_entry 캐시 관리를 구현하십시오
return apcu_entry($cacheKey, function() use ($userId) {
return getUserInfoFromDb($userId);
}, 3600); // 은닉처1시간
}
// 전화 예제
$user = getUserInfo(123);
print_r($user);
위의 예에서 :
GetUserInfo (123)가 처음으로 요구되면 캐시가 존재하지 않습니다. APCU_ENTRY는 콜백 함수를 실행하여 데이터베이스에서 데이터를 얻고 캐시합니다.
그런 다음 호출은 캐시에서 직접 데이터를 가져 와서 중복 쿼리를 피합니다.
TTL을 합리적으로 설정 (생존 시간)
과도한 캐시로 인해 데이터가 부정확 한 데이터를 피하기 위해 데이터 변경 빈도에 따라 캐시의 만료 시간을 설정하십시오.
캐시 눈사태를 피하십시오 <br> 다른 캐시 항목은 다른 만료 시간을 설정하여 많은 양의 캐시가 만료되는 동시에 데이터베이스 압력이 단기간에 급증하는 것을 방지 할 수 있습니다.
캐시 고장 보호
APCU_ENTRY 는 원자 연산이므로 데이터베이스를 동시에 쿼리하라는 여러 요청을 피할 수 있지만보다 복잡한 시나리오의 경우 잠금 메커니즘과 결합 할 수 있습니다.
캐시 침투 방어 <br> 존재하지 않는 데이터의 경우 악의적이거나 잘못된 요청이 과도한 데이터베이스 스트레스를 유발하지 않도록 빈 결과를 캐시하는 것이 좋습니다.
APCU_ENTRY 는 PHP APCU 확장에서 강력한 캐시 인터페이스입니다. 캐시 관리 로직을 단순화하고 중복 쿼리 및 경쟁 문제를 줄이며 PHP 응용 프로그램의 성능을 크게 향상시킵니다.
적절한 캐싱 전략 및 애플리케이션 시나리오 설계와 결합 된 APCU_ENTRY 의 합리적인 사용은 응답 속도 및 시스템 부하로 PHP 응용 프로그램을 크게 향상시킬 수 있습니다.
APCU의보다 자세한 소개 및 사용 문서를 보려면 공식 문서에 액세스 할 수 있습니다 : https://gitbox.net/manual/en/function.apcu-entry.php .