현재 위치: > 최신 기사 목록> apcu_entry와 apcu_add와 응용 프로그램 시나리오의 차이점

apcu_entry와 apcu_add와 응용 프로그램 시나리오의 차이점

gitbox 2025-05-26

PHP의 APCU 캐시 확장을 사용하는 경우 개발자는 종종 APCU_ENTRY ()APCU_ADD () 의 두 기능과 접촉합니다. 그들은 모두 캐시에 데이터를 작성하는 데 사용되지만 행동과 해당 시나리오에는 명백한 차이가 있습니다. 이 기사는 구현 원리, 사용 시나리오 및 성능의 관점과의 차이점을 분석하고 실제 예와 함께 설명합니다.

1. 기본 개념

apcu_add (String $ 키, 혼합 $ var, int $ ttl = 0) : bool

이 함수는 캐시에 값을 추가하고 지정된 $ 키가 이미 존재하면 추가가 실패하여 False를 반환합니다. 이는 APCU_ADD () 가 "한 번만 추가"작업이며, 종종 피해야하는 초기화 또는 시나리오에 종종 사용됩니다.

apcu_entry (문자열 $ 키, 호출 가능한 $ 생성기, int $ ttl = 0) : 혼합

이 기능은 캐시에서 $ 키 에 해당하는 값을 얻으려고합니다. 키가 존재하지 않으면 $ Generator 콜백 함수가 호출되어 데이터를 생성하고 캐시에 씁니다. 전형적인 목적은 반복적 인 비싼 작업을 피하기 위해 "게으른 부하"시나리오를 만드는 것입니다.

2. 구현 메커니즘의 비교

  • 키가 존재하는지 확인하십시오.

    • apcu_add () 는 원자이며 직접 추가하려고 시도하며 키가 이미 존재하는 경우 읽기 쓰기 경주를 피합니다.

    • APCU_ENTRY ()는 먼저 그것을 읽으려고 시도합니다. 누락 된 경우 콜백을하여 데이터를 생성하고 쓰려고합니다. 이로 인해 동시성 하에서 반복 계산이 발생할 수 있습니다 (실제 발생 확률은 낮지 만).

  • 행동 작성 :

    • apcu_add ()는 기존 값을 덮어 쓰지 않으며 "한 번만 설정하려는 상황에 적합합니다.

    • APCU_ENTRY ()는 캐시가 존재하지 않을 때 자동으로 계산 및 쓰기로, 게으른 하중에 적합합니다.

  • 간단:

    • APCU_ENTRY ()는 더 명확한 캡슐화 구조를 제공하고 한 줄의 코드는 명확한 의미를 통해 무효화 될 때 캐시를 읽습니다 + 생성 로직을 읽습니다.

    • APCU_ADD () 는 개발자가 읽기 및 판단 논리를 수동으로 작성해야합니다.

3. 예제를 사용하십시오

1. APCU_ADD ()를 사용하여 한 번만 실행되는 구성 데이터를 초기화합니다.

 $config = [
    'site_name' => 'GitBox',
    'max_upload' => 100
];

$key = 'site_config';
if (!apcu_add($key, $config, 3600)) {
    // 이미 존재합니다,치료가 완료되지 않았습니다
}

배포 또는 초기화 단계에 작성된 구성 데이터에 적합하여 반복적으로 설정하거나 덮어 쓰지 않도록합니다.

2. APCU_ENTRY ()를 사용하여 캐시의 자동 계산을 구현하십시오

 $data = apcu_entry('user_list', function() {
    // 이 기능이 데이터베이스를 쿼리한다고 가정하십시오
    return file_get_contents('https://gitbox.net/api/users');
}, 600);

여기서 user_list는 데이터를 가져 와서 존재하지 않을 때 액세스 API를 통해 캐시합니다.

4. 적절한 사용 시나리오

장면 apcu_add () 사용 apcu_entry () 사용
설정 초기화 ? ?
적용 범위를 피하십시오 ? ?
자동으로 생성되었습니다 ? ?
게으른 적재 ? ?
캐시 로직을 단순화합니다 ? ?

5. 동시 시나리오에서 주목해야 할 사항

동시 동시성 환경에서는 APCU_ENTRY () 가 편리하지만 내부 논리는 강력하게 일관되지 않습니다. 여러 프로세스가 키가 존재하지 않는지 동시에 결정하고 데이터를 생성 할 수 있습니다. 따라서 콜백이 비싸거나 결과가 고유 한 경우 잠금 장치를 추가하거나 apcu_add ()를 사용하여 판단을 돕는 것이 좋습니다.

 $key = 'report_2025';
if (!apcu_add($key, true, 300)) {
    // 작업은 다른 프로세스에서 실행되었습니다
    return;
}
generateExpensiveReport();  // 한 번만 실행하십시오

6. 요약

  • APCU_ADD ()를 사용하는 것이 한 번만 쓰기를 수행하려는 경우 최상의 선택입니다.

  • apcu_entry ()를 사용하는 것은 계산 결과를 자동으로 얻고 캐시하는보다 효율적인 방법입니다.

  • 차이를 이해하면 PHP의 캐시 로직을보다 합리적으로 설계하고 응용 프로그램 성능을 향상 시키며 리소스 소비를 줄일 수 있습니다.