2009-07-29 6 views
17

와일드 카드 키에 따라 memcache의 항목을 무효화하는 방법이 있습니까?Memcache가 패턴에 따라 항목을 무효화합니까?

그래서 나는 다음과 memcache에 키가있는 경우 :

data/1 
data/2 
data/3 

내가 data/* 같은 것을 가진 사람 키를 무효화 할 수있는 방법이 있나요를? 한 번에 많은 오래된 데이터를 제거하는 것이 매우 유용 할 것입니다.

답변

23

가장 좋은 방법은 당신의 memcache에 키를 생성 할 때 버전 키를 제공하는 경우 : official wiki

그것을 해결하는 방법에 대한 제안이있다. 우리는 시스템에 키를 생성하는 단일 함수/메소드를 제공함으로써이를 수행합니다. 처음에

5:monkeyInfo:123:456 

주목하라 '5':

$var1 = 123; 
$var2 = 456; 
$cacheKey = makeKey('monkeyInfo', $var1, $var2, ...); 

makeKey()는 cacheKeyVersions 배열 반환에있는 정보를 사용합니다. 그것은 keyNames => 버전의 하드 코딩 된 배열에서 온 것입니다. 따라서 우리가 시스템의 모든 'monkeyInfo'캐시 값을 무효화하려면 배열에서 해당 숫자를 6으로 변경하면됩니다. 그때부터 동일한 전화를 찾을 것입니다

6:monkeyInfo:123:456 

다음은 키 버전 배열의 모습입니다. 'makeKey()'호출은이 배열을 조사하여 주어진 키의 버전 번호를 가져옵니다.

$cacheKeyVersions = array(
    'monkeyInfo' => 5, 
    'zebraInfo' => 2 
); 

귀하의 필요에 맞는 구현을하기 위해 모든 것을 할 수 있지만 그게 기본 요령입니다.

+0

또한 makeKey 함수/메소드에는 필요할 경우 전체 캐시를 플러시 할 수있는 전역 버전이 포함될 수 있습니다. 또는 키의 특정 도메인을 플러시하는 데 사용할 수도 있습니다. – conceptDawg

+0

아주 능숙하게 작업을 수행 할 수 있습니다. 통찰력에 감사드립니다. – Kekoa

+0

@ConceptDawg이 알고리즘을 구현할 라이브러리 (예 : PHP)가 있거나 알고 있습니까? – romaninsh

5

memcached는 네임 스페이스 삭제를 지원하지 않습니다.