2009-07-29 8 views
17

Gibt es eine Möglichkeit, Einträge in Memcache gemäß einem Platzhalterschlüssel ungültig zu machen?Memcache Einträge nach einem Muster ungültig machen?

Also, wenn ich die folgenden memcache Schlüssel haben:

data/1 
data/2 
data/3 

Gibt es eine Weise, die ich diese Schlüssel mit so etwas wie data/* ungültig machen kann? Es wäre äußerst hilfreich, eine Reihe von veralteten Daten auf einen Schlag zu löschen.

Antwort

23

Der beste Weg, einen Versionsschlüssel zur Verfügung zu stellen ist, wenn Ihr memcache Schlüssel zu schaffen. Dazu stellen wir eine einzige Funktion/Methode zum Erstellen eines Schlüssels auf unserem System bereit.

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

makeKey() verwendet die Informationen in der cacheKeyVersions Array und gibt:

5:monkeyInfo:123:456 

Mitteilung der '5' am Anfang. Das kommt von einem fest codierten Array von keyNames => Versionen. Wenn wir also ALLE 'affeInfo'-Cache-Werte im System ungültig machen wollen, müssen wir diese Zahl einfach auf 6 im Array ändern. Fortan wird auf dem gleichen Anruf für

6:monkeyInfo:123:456 

Hier suchen ist ein Beispiel dafür, was der Schlüssel Version Array aussehen könnte. Der Aufruf 'makeKey()' sucht einfach in diesem Array nach der Versionsnummer für einen beliebigen Schlüssel.

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

Sie könnten alle möglichen Dinge tun, um die Implementierung Ihren Anforderungen anzupassen, aber das ist das Wesentliche.

+0

Beachten Sie außerdem, dass Ihre makeKey-Funktion/Methode auch eine globale Version enthalten könnte, die es Ihnen ermöglicht, den gesamten Cache bei Bedarf zu leeren. Oder Sie könnten es verwenden, um bestimmte Domänen von Schlüsseln usw. zu löschen. Es liegt an Ihnen. – conceptDawg

+0

Sehr schlauer Weg, um die Aufgabe zu erfüllen. Danke für die Einsicht. – Kekoa

+0

@ConceptDawg Haben oder kennen Sie Bibliotheken (vorzugsweise PHP), die diesen Algorithmus implementieren würden? – romaninsh

5

memcached unterstützt keine Namespaced-Löschvorgänge.

Die official wiki hat einen Vorschlag, wie um ihn zu arbeiten: