현재 위치: > 최신 기사 목록> APCU_ENTRY 및 사용자 정의 태그를 통해 캐시 종속성 관리를 구현하는 방법

APCU_ENTRY 및 사용자 정의 태그를 통해 캐시 종속성 관리를 구현하는 방법

gitbox 2025-05-26

캐시 관리에서 특히 여러 캐시 항목이 서로 의존하는 경우 일반적으로 이러한 종속성을 추적하는 방법이 필요합니다. 캐시 항목이 변경되면 관련 캐시를 자동으로 업데이트 할 수 있기를 원합니다. 이 시점에서 맞춤형 태그는 우아한 솔루션을 제공합니다.

1. 태그를 사용하여 캐시 업데이트를 관리하십시오

사용자 정의 태그를 도입하면 각 캐시 항목에 대한 종속성 태그를 지정할 수 있습니다. 이 태그는 캐시 항목과 다른 캐시 데이터 간의 종속성을 나타내는 데 사용됩니다. 외부 리소스의 상태에 의존하는 캐시 된 데이터 항목 세트가 있다고 가정합니다 (예 : 데이터베이스 테이블의 내용이 변경).

먼저 캐시 된 데이터를 저장하고 종속성 태그를 도입하는 함수를 만들 수 있습니다.

 function storeWithDependencies($key, $data, $dependencyKey) {
    // 캐시에 데이터를 저장합니다
    apcu_store($key, $data);
    
    // 캐시 항목의 종속성 마커 업데이트
    apcu_store($dependencyKey, time());  // 타임 스탬프를 마커로 사용하십시오
}

이 예에서는 StorewithDependencies () 함수는 데이터 저장 외에도 종속성 태그를 업데이트합니다. 타임 스탬프를 종속성 마커로 사용하면 마크가 변경되면 관련 캐시 항목도 업데이트 될 수 있습니다.

2. 캐시를 업데이트 해야하는지 확인하십시오

캐시 된 데이터를 얻을 때 종속성 마커에 변경 사항이 있는지 확인해야합니다. 태그가 변경되면 캐시 된 데이터를 재생할 수 있습니다.

 function fetchWithDependencies($key, $dependencyKey) {
    // 현재 종속성 태그를 얻으십시오
    $lastDependencyUpdate = apcu_fetch($dependencyKey);
    
    // 캐시 된 데이터를 가져옵니다
    $cachedData = apcu_fetch($key);
    
    // 캐시 된 데이터가 존재하지 않거나 종속성 마커가 업데이트 된 경우,캐시를 다시 계산하고 저장하십시오
    if ($cachedData === false || $lastDependencyUpdate < getLastDataUpdateTime()) {
        $cachedData = getSomeDataFromDb();
        apcu_store($key, $cachedData);
        apcu_store($dependencyKey, time());
    }
    
    return $cachedData;
}

이 코드에서 FetchWithDependencies () 함수는 캐시 된 데이터가 존재하는지 확인하고 종속성 마크가 변경되었는지 여부를 비교합니다. 종속성 태그가 변경되면 (예 : 데이터베이스 테이블이 업데이트 됨) 캐시 데이터가 다시 계산되고 캐시와 태그가 업데이트됩니다.

APCU_ENTRY 및 사용자 정의 태그를 결합한 캐시 관리 정책

apcu_entry () 함수와 사용자 정의 태그를 결합하여보다 효율적이고 유연한 캐시 종속성 관리를 달성 할 수 있습니다. 캐시 종속성이 변경되면 새 캐시가 자동으로 업데이트되며 애플리케이션 성능에 영향을 미치는 만료 또는 유효하지 않은 데이터를 피합니다.

예를 들어, 복잡한 종속성이있는 캐시 시스템에서 다음 전략을 사용할 수 있습니다.

 function fetchWithComplexDependencies($key, $dependencyKey) {
    // 사용 apcu_entry 캐시 된 데이터를 얻거나 계산합니다
    return apcu_entry($key, function() use ($dependencyKey) {
        // 종속성 마커가 변경되었는지 확인하십시오
        if (apcu_exists($dependencyKey)) {
            $lastUpdate = apcu_fetch($dependencyKey);
            if ($lastUpdate < getLastDataUpdateTime()) {
                // 데이터가 업데이트되었습니다,재판소가 필요합니다
                return getSomeDataFromDb();
            }
        }
        
        // 캐시 된 데이터는 변경되지 않았습니다,기존 캐시로 돌아갑니다
        return apcu_fetch($key);
    });
}

이 예에서 APCU_ENTRY ()는 캐시 된 데이터에 대한 액세스를 처리하는 데 사용되는 반면, 종속성 태그는 캐시가 다시 계산 될 때 제어합니다. 이러한 방식으로 외부 종속성이 변경되면 캐시 시스템을 제 시간에 업데이트하여 최신 데이터를 얻을 수 있습니다.