memcache et des caractères génériques
Je me demandais simplement si il y a un moyen de l'effacer memcache à l'aide de caractères génériques pour les valeurs de la clé.
Donc, dis-je avoir un cache avec la touche "1234~foo" et un autre "1234~foo~bar".
Est-il possible que je peux dire, vider le cache en utilisant quelque chose comme clair("1234*") et ont clairement à la fois d'en haut?
J'espère qu'un sens.
Grâce.
Vous devez vous connecter pour publier un commentaire.
Non, il n'y a pas un direct moyen facile de le faire. Le FAQ adresses de cela, et avec une sorte de solution de contournement:
La suppression par l'espace de Noms
Alors que memcached ne prend pas en charge tout type de générique de la suppression ou de la suppression par l'espace de noms (car il n'y a pas d'espaces de noms), il y a quelques trucs qui peuvent être utilisés pour simuler cela. Ils ne nécessitent plus d'excursions vers les serveurs memcached cependant.
Exemple, en PHP, pour l'utilisation d'un espace de noms appelé foo:
foo_namespace_key*
?->getAllKeys
. Elle retourne un tableau de clés de la forme[0] => sandbox-cache_views ....... [342] => sandbox-cache-schema
la solution au-dessus de la nullité de tous ces entrées si je remplacefoo_namespace_key
avecsandbox
? si oui faut-il faire par incrémentation exactement ce que?Une note concernant l'espace de noms de la solution par Eric Petroelje:
Rappelez-vous que vous ne savez pas quand memcached va vous expulser de l'espace de noms de la clé. Memcache peut vous expulser de l'espace de noms de la clé, puis lorsque vous tentez de définir une nouvelle clé, il a une probabilité de 1 à 10000, que la même clé d'index, ce qui signifie que vous aurez "sale" des résultats. C'est peu probable, mais la ligne de fond, il n'est pas sûr.
Même problème avec la solution de Poul Vernon.
Une solution sûre, va être d'utiliser un stockage fiable (par exemple, disque) pour le "pointeur de la touche"/"espace de noms de la clé".
Comment à propos de cette fonction en php:
Supprime les clés commençant par $prefix, et renvoie une liste de toutes les clés supprimées. J'ai couru ce sur 30.000+ touches maintenant sur un serveur partagé, et c'était assez rapide, probablement moins d'une seconde.
$m->deleteMulti($keys)
à la fin.php.net/manual/en/memcached.deletemulti.phpdelete
etdeleteMulti
fait une différence en termes de performances, mais je pense que vous ne pouvait réellement observé aucune différence avec 1M+ touches.if (strpos($key,$search) === 0) { $m->delete($key);}
$search
. cela supprime les clés qui contiennent$search
dans n'importe quelle position.getAllKeys()
fonction est un peu douteux. Aussi, pour l'anecdote, il est cassé dans la dernière version de libmemcached (bugs.launchpad.net/libmemcached/+bug/1534062). Si vous êtes en fonction sur cette fonction, assurez-vous d'utiliser memcached 1.4.22 ou plus tôt.Créer un memcache entrée pour "1234" et à l'intérieur de stocker un tableau de clés associées. Sur votre supprimer la routine de lecture et d'itérer sur ces touches pour supprimer.