현재 위치: > 최신 기사 목록> APCU_ENTRY 캐시 및 영구 스토리지

APCU_ENTRY 캐시 및 영구 스토리지

gitbox 2025-05-21

동시 웹 애플리케이션에서 자주 데이터 읽기 및 쓰기는 성능 병목 현상이됩니다. 데이터베이스에 대한 압력을 완화하고 데이터 액세스 속도를 높이기 위해 개발자는 종종 캐싱 메커니즘을 중간 계층으로 사용합니다. APCU 는 PHP에서 특히 인기있는 경량 메모리 캐싱 솔루션입니다. APCU 가 제공하는 많은 인터페이스 중에서 APCU_ENTRY 기능은 원자력과 편의성을 갖춘 효율적인 데이터 캐싱 전략을 구축하기위한 강력한 도구가되었습니다.

이 기사는 APCU_ENTRY 기능을 사용하는 방법을 소개하고 영구 스토리지 (예 : 데이터베이스 또는 파일 시스템)를 결합하여 효율적이고 신뢰할 수있는 데이터 액세스 솔루션을 달성합니다.

1. APCU_ENTRY 란 무엇입니까?

APCU_ENTRY 는 PHP 5.5+에 도입 된 편리한 기능으로 캐시 값을 얻는 동안 캐시를 "백필"하기 위해 콜백 함수를 정의 할 수 있습니다. 캐시에 해당 키가 없으면 콜백 함수를 자동으로 호출하여 데이터를 생성하고 캐시에 씁니다.

함수 서명은 다음과 같습니다.

 mixed apcu_entry(string $key, callable $generator, int $ttl = 0)
  • $ 키 : 캐시 된 키 이름.

  • $ 생성기 : 데이터를 생성하는 데 사용되는 콜백 함수.

  • $ ttl : 캐시 생존 시간 (초), 기본값은 만료되지 않습니다.

2. 캐싱과 지속성의 공동 작업 모델

기존 캐시 사용 방법은 "캐시를 먼저 확인한 다음 데이터베이스를 확인하십시오"입니다. 프로세스는 다음과 같습니다.

  1. 캐시가 발생하는지 여부를 쿼리하십시오.

  2. 누르면 직접 돌아갑니다.

  3. 누락 된 경우 데이터베이스에서 데이터를 읽으십시오.

  4. 캐시에 데이터를 작성하고 반환하십시오.

apcu_entry를 사용하면 위의 논리를 한 줄로 압축 할 수 있습니다.

 $data = apcu_entry('user_42', function() {
    return fetch_user_from_db(42);
}, 300);

위의 코드의 의미는 다음과 같습니다. 캐시에서 user_42를 읽으십시오. 그렇지 않은 경우 fetch_user_from_db (42)를 실행하여 데이터를 가져 와서 300 초 동안 캐시합니다.

3. 실제 예 : 데이터베이스와 결합

사용자 정보 테이블이 있고 이제 사용자 데이터를 캐시하고 싶다고 가정합니다.

 function fetch_user_from_db($id) {
    $pdo = new PDO('mysql:host=localhost;dbname=testdb', 'root', '');
    $stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
    $stmt->execute([$id]);
    return $stmt->fetch(PDO::FETCH_ASSOC);
}

function get_user($id) {
    return apcu_entry("user_$id", function() use ($id) {
        return fetch_user_from_db($id);
    }, 600); // 은닉처 10 분
}

이 모드에는 간결한 코드가있을뿐만 아니라 캐시 고장 문제를 효과적으로 피합니다.

4. 캐시 예제 원격 API와 결합

일부 데이터는 외부 API에서 제공되며 통화 비용이 높습니다. 예를 들어 https://api.gitbox.net/user/42 에서 사용자 정보를 가져옵니다. APCU_ENTRY를 캐시로 사용할 수도 있습니다.

 function fetch_user_from_api($id) {
    $url = "https://api.gitbox.net/user/$id";
    $response = file_get_contents($url);
    return json_decode($response, true);
}

function get_user_from_api($id) {
    return apcu_entry("api_user_$id", function() use ($id) {
        return fetch_user_from_api($id);
    }, 300); // 은닉처 5 분
}

이렇게하면 원격 API를 호출하는 빈도를 크게 줄이고 응답 속도를 향상시킬 수 있습니다.

5. 주목할만한 것들

  1. 공유 메모리 한계 : APCU의 캐시 된 데이터는 로컬 메모리에 저장되며 다른 PHP-FPM 프로세스간에 공유되므로 APC.SHM_SIZE가 충분한 지 확인하십시오.

  2. 원본에만 적용 가능 : APCU는 프로세스 내 캐시이며 다중 서버 환경에 대한 것이 아닙니다. Redis, Memcached 등과 같은 분산 캐시와 함께 사용할 수 있습니다.

  3. 더 읽기 및 덜 읽는 데이터에 적합 : 자주 업데이트되는 데이터에는 APCU 캐시가 권장되지 않으며 데이터 불일치를 방지하기 위해 동기화 메커니즘을 사용해야합니다.

6. 요약

APCU_ENTRY를 사용하면 캐시를 데이터베이스 또는 API와 같은 지속적인 스토리지와 우아하게 결합하여 간결하고 효율적이며 결함이 강한 코드를 작성할 수 있습니다. 그것의 원자력과 게으른 하중 특성은 개발 프로세스를 단순화 할뿐만 아니라 시스템의 유지 보수 가능성을 향상시킵니다.

데이터베이스 쿼리 결과에 로컬로 캐시 되든 원격 API에 대한 액세스 빈도를 줄이든 APCU_ENTRY 는 권장되는 실용적인 솔루션입니다. 성능 최적화를 추구하는 PHP 프로젝트의 필수 부분입니다.