2011-04-28 4 views
6

젠드 캐시 (APC 백엔드)를 사용하기 시작했으며 매번 데이터베이스를 치는 대신 캐시 된 값을 반환하는 것이 좋습니다. 그러나 heres는 내 문제 :젠드 캐시를 지우는 패턴

$cache_key = 'getrebates_'.$operator_code; 

if(PP_Model_CacheService::exists($cache_key)) { 
    $cached_values = PP_Model_CacheService::load($cache_key); 
} else { 
    //hits the db  
    $cached_values = $this->getAll($operator_code); 
    PP_Model_CacheService::save($cached_values, $cache_key); 
} 
return $cached_values; 

나는 데이터베이스를 변경하고 모든 사업자들에게 리베이트를 취소해야하는 경우 각 운영자는 내가 이런 짓을 했을까하는 방법, 지금은 사업자마다 다를 자신의 리베이트를 가지고?

$ Cache-> clean()을 사용할 수 있지만 다른 캐시 (각 운영자의 리베이트 캐시가 아님)가 삭제됩니다. 만약 모든 사업자를 통해 I 루프 : 캐시에 대한 작업을 많이처럼 보인다

foreach($operator_codes AS $operator_code) { 
    $cache_key = 'getrebates_'.$operator_code; 
    $cache->delete($cache_key) 
} 

. 캐시 섹션 만 지울 수 있습니까?

//Something like: 
$section_key = 'getrebates'; 
$Cache[$section_key][$operator_code]; 
$Cache->clearSection($section_key); 

APC 캐시에 대한 배열 구조가 있습니까? 아니면 모든 캐시 키/값 기반입니까?

답변

10

캐시에 저장된 값에 태그를 적용 할 수 있습니다. 그렇게하면 특정 태그가있는 모든 캐시 항목을 쉽게 삭제할 수 있습니다. http://framework.zend.com/manual/en/zend.cache.theory.html 및 Zend_Cache_Core의 청소 방법에 대한 자세한 내용은 API :

$cache->save($huge_data, 'myUniqueID', array('tagA', 'tagB')); 

// clear all cache entries with tag tagA or tagC 
$cache->clean(
    Zend_Cache::CLEANING_MODE_MATCHING_TAG, 
    array('tagA', 'tagC') 
); 

이 페이지를 참조하십시오 http://framework.zend.com/apidoc/1.11/

+2

(APC 제외) ... – regilero

+0

시간 내 주셔서 감사드립니다. regilero가 지적했듯이 APC는 태그를 지원하지 않습니다. 이 경우 백엔드를 사용하여 태그를 지원 하시겠습니까? –

+0

몇 개의 캐시 엔트리가 있습니까? 10 또는 20면 각 항목을 삭제하면됩니다. 필요에 따라 개별 항목 대신 직렬화 된 연관 배열을 캐시에 저장할 수 있습니다. – theduke

4

@theduke이 옳다, 태그 그것을 할 올바른 방법은 으로, APC를 제외하다 Zend_Cache_Backend_Apc는 태그 지정을 지원하지 않습니다. the doc에서 :

는주의 :이 백엔드와 "태그" 는 순간

지원되지 않습니다 그리고 마지막 코멘트에서 당신은 백엔드로 APC를 사용하는 SEMS. 따라서이 클래스를 확장하고 태그 비헤이비어를 추가하거나 (태그 식별자에 특수 구문을 추가하여 장기 캐시 항목에서 태그 대 캐시 항목 매핑을 처리하여) 또는 다른 캐시를 사용하기로 결정하십시오. 백엔드.

+0

어떤 백엔드가 태그를 지원합니까?하지만 자주 개별 항목을 업데이트/삭제해야하는 경우에는 좋지 않습니다. 대부분의 백엔드가 Zend 설명서에서 가져온 것 같지 않습니다. –

+0

http://framework.zend.com/manual/en/zend.cache.backends.html에서 볼 수 있듯이 파일 백엔드, SQLite 백엔드 및 ZendPlatform에서 부분적으로. – regilero

관련 문제