2009-07-29 17 views
17

Czy istnieje sposób unieważniania wpisów w memcache zgodnie z kluczem wieloznacznym?Memcache unieważnia wpisy według wzorca?

Więc jeśli mam następujące klucze memcache:

data/1 
data/2 
data/3 

czy istnieje sposób mogę unieważnić te klucze z czymś data/*? Byłoby niezwykle pomocne, aby usunąć kilka nieaktualnych danych za jednym zamachem.

Odpowiedz

23

Najlepszym sposobem jest dostarczenie klucza wersjonowania podczas tworzenia memcache klucz. Robimy to poprzez zapewnienie jednej funkcji/metody do tworzenia klucza w naszym systemie.

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

makeKey() wykorzystuje informacje w tablicy cacheKeyVersions i zwrotów:

5:monkeyInfo:123:456 

zauważy '5' na początku. To pochodzi z zakodowanej na sztywno tablicy keyNames => wersji. Więc jeśli chcemy unieważnić KAŻDĄ wartość bufora monkeyInfo w systemie, musimy po prostu zmienić tę liczbę na 6 w tablicy. Od tej pory to samo połączenie będzie szukało

6:monkeyInfo:123:456 

Oto przykład tego, jak może wyglądać tablica z kluczową wersją. Wywołanie "makeKey()" po prostu analizuje tę tablicę, aby uzyskać numer wersji dla danego klucza.

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

Możesz zrobić wiele rzeczy, aby implementacja była zgodna z Twoimi potrzebami, ale to podstawowy jej sens.

+0

Należy również pamiętać, że funkcja/metoda makeKey może również zawierać wersję globalną, która w razie potrzeby umożliwiłaby opróżnienie całej pamięci podręcznej. Możesz też użyć go do przepłukania określonych domen kluczy itp. To zależy od Ciebie. – conceptDawg

+0

Bardzo sprytny sposób na wykonanie zadania. Dzięki za wgląd. – Kekoa

+0

@ConceptDawg posiadasz lub znasz jakieś biblioteki (najlepiej PHP), które implementowałyby ten algorytm? – romaninsh

5

memcached nie obsługuje usuwania z odstępem od nazw.

official wiki ma sugestii, w jaki sposób obejść: