동시 웹 애플리케이션이 높은 경우 캐싱은 성능을 향상시키는 핵심 수단입니다. PHP는 APCU (로컬 캐시 용)와 각각 고유 한 장점이있는 Memcached (분산 캐시)와 함께 다양한 캐싱 메커니즘을 제공합니다. 이 두 캐싱 메커니즘을 사용하면 합리적으로 시스템의 전반적인 성능과 안정성을 크게 향상시킬 수 있습니다.
이 기사는 실제 코드 예제를 사용하여 APCU_ENTRY 기능을 로컬 캐시의 우선 순위 입구로 사용하는 방법을 설명하고 MemCached와 협력하여 효율적인 캐시 성능 최적화의 목적을 달성하기 위해 2 단계 캐싱 메커니즘을 구현합니다.
APCU : 메모리 상주, 매우 빠른 로컬 캐시, 크로스 프로세스 공유를 지원하지 않으며 자주 읽기 데이터를 저장하는 데 적합합니다.
MemCached : 클러스터 환경에 적합하지만 APCU에 비해 특정 네트워크 오버 헤드가있는 서버 간 데이터 공유를 지원합니다.
APCU를 레벨 1 캐시로 사용하고 레벨 2 캐시로 멤버링하면 데이터 일관성을 유지하고 백엔드로드를 줄이면 응답 속도를 향상시킬 수 있습니다.
APCU_ENTRY 는 APCU가 제공하는 편의 기능으로 값을 생성하기위한 키 및 콜백 함수를 전달할 수 있습니다. 지정된 키가 존재하지 않으면 APCU는 콜백을 자동으로 호출하여 값을 가져 와서 캐시합니다.
함수 서명은 다음과 같습니다.
mixed apcu_entry(string $key, callable $generator, int $ttl = 0)
우리가 원하는 캐시 로직은 다음과 같습니다.
먼저 APCU에서 캐시를 읽으십시오.
놓친 경우 MemCached에서 읽으십시오.
여전히 실패한 경우 데이터베이스 쿼리와 같은 시간이 많이 걸리는 작업을 수행하고 결과를 APCU에 동시에 작성하고 동시에 MEMCAChed.
<?php
$memcached = new Memcached();
$memcached->addServer('localhost', 11211);
function getUserProfile($userId) {
$key = "user_profile_" . $userId;
return apcu_entry($key, function () use ($key, $userId) {
global $memcached;
// 시도해보십시오 Memcached 들어가십시오
$data = $memcached->get($key);
if ($data !== false) {
return $data;
}
// 데이터베이스에서 데이터 쿼리 데이터를 시뮬레이션합니다
$data = queryUserProfileFromDatabase($userId);
// 저장하십시오 Memcached(만료 시간을 설정하십시오 300 두번째)
$memcached->set($key, $data, 300);
return $data;
}, 60); // APCu 캐시 시간은입니다 60 두번째
}
function queryUserProfileFromDatabase($userId) {
// 假设这是从数据库들어가십시오用户资料的函数
return [
'id' => $userId,
'name' => 'User ' . $userId,
'email' => 'user' . $userId . '@gitbox.net'
];
}
// 샘플 통화
$user = getUserProfile(42);
print_r($user);
APCU는 매우 빠른 액세스 작업을 가지고 있으며 짧은 시간 내에 고주파수로 액세스하는 데이터에 적합합니다.
Memcached는 백업 캐시 역할을하여 APCU가 만료 된 후에도 데이터를 빠르게 얻을 수 있도록합니다.
데이터베이스 작업은 APCU 나 Memcached Hit이 아닌 경우에만 수행되어 데이터베이스 압력을 효과적으로 줄입니다.
실패 동기화 : 이벤트 중심 또는 후크를 통해 데이터가 업데이트 될 때 APCU의 관련 키를 적극적으로 지울 수 있습니다.
클러스터 환경 호환성 : 클러스터에서 APCU는 단일 노드에서만 사용할 수 있지만 Memcached는 크로스 노드 공유에 사용될 수 있으므로 사용하기에 더 실용적입니다.
고 가용성 설계 : 가용성 및 결함 공차를 향상시키기 위해 여러 노드를 Memcached에 설정할 수 있습니다.
APCU_ENTRY 기능을 로컬 캐시 항목으로 사용하고 MemCached에 의해 구현 된 보조 캐시 전략을 결합함으로써 PHP 응용 프로그램의 응답 속도 및 확장 성을 크게 향상시킬 수 있습니다. 이 방법은 간단하고 실용적이며 유지 관리가 쉬우 며 중간 및 대형 웹 프로젝트의 핫 데이터 캐싱 시나리오에 특히 적합합니다.
APCU_ENTRY 의 게으른 컴퓨팅 파워와 MemCached의 분산 기능을 사용하면 효율적이고 고도로 사용 가능한 캐시 시스템을 구축하여 시스템 성능 최적화를위한 견고한 토대를 마련 할 수 있습니다.