2009-03-09 6 views
1

Dans le "Memcache Viewer", existe-t-il un moyen de vider une liste de clés existantes? Juste pour le débogage, bien sûr, pas pour une utilisation dans les scripts! Je demande car il ne semble pas que le GAE SDK utilise un serveur memcache "réel", donc je suppose qu'il est émulé en Python (pour simplifier, car c'est juste un serveur de développement) .. Cela signifierait il ya un dict quelque part avec les clés/valeurs ..Vider les clés memcache de la console GAE SDK?

Répondre

8

Les gens le demandent souvent sur la liste memcached, parfois avec le même type de "juste au cas où je veux chercher à déboguer quelque chose". La meilleure façon de gérer cela est de savoir comment vous générez vos clés, et allez chercher des choses quand vous voulez savoir ce qui est stocké pour une valeur donnée.

Si vous avez trop de choses en utilisant memcached pour faire cela dans le cadre de votre session de débogage, alors démarrez l'accès à la journalisation. Mais gardez à l'esprit - memcached est rapide car il ne permet pas de telles choses en général. Le serveur de communauté a des fonctionnalités limitées pour obtenir un sous-ensemble de clés disponibles dans une classe de dalle donnée, mais ce n'est probablement pas ce que vous voulez vraiment, et j'espère que google ne l'implémente pas dans le leur. :)

4

Non. Je n'ai pas trouvé une telle fonctionnalité dans memcached aussi. En pensant à ce problème, j'ai trouvé cette limitation compréhensible - il faudrait garder un registre des clés avec tous les problèmes connexes comme l'expiration de la clé, l'invalidation et bien sûr le verrouillage. Un tel système ne serait pas aussi rapide que les memcaches sont destinés à l'être.

+0

Le client memcache du serveur de développement GAE se connecte-t-il réellement à un serveur memcache? Regardant rapidement le code, il semble presque qu'il est émulé en Python ..? – dbr

+0

Pour ma meilleure compréhension, c'est bien la propre implémentation de Google qui pourrait être basée, mais ce n'est certainement pas memcache. Il utilise l'api Memcache mais parce que c'est facile et fait bien le travail. –

0

Memcache est conçu pour être rapide et il n'y a pas de cas d'utilisation convaincant pour cette fonctionnalité qui justifierait la surcharge nécessaire pour une commande qui est en contradiction avec le reste de memcached. Le GAE SDK simule memcached, donc il n'offre pas cette fonctionnalité non plus.

+0

Ceci est incorrect. memcached détient certainement toutes vos clés, drapeaux, expiration, identificateurs de cas, et quelques autres choses en mémoire. Ce qu'il ne fait pas, c'est effectuer toutes les options qui ne peuvent pas être exécutées dans un laps de temps connu (O (1) - comme la liste de toutes les clés). – Dustin

+0

Vous avez raison, les clés sont hachées pour déterminer le serveur à utiliser, mais la clé d'origine est transmise au serveur plutôt que le hachage comme je le pensais à l'origine. –

0

Le moyen le plus simple que je pourrais penser, serait de maintenir une clé memcache à un ID connu, et ensuite ajouter à chaque fois que vous insérez une nouvelle clé. De cette façon, vous pouvez simplement demander la clé unique pour obtenir une liste des clés existantes.

0

Voici une solution possible. Je ne connais pas Google App Engine mais sur un serveur memcache régulier, vous pouvez lister toutes les clés par telnet comme ceci:

telnet 127.0.0.1 11211 
stats items 
STAT items:7:number 5 
STAT items:7:age 88779 
STAT items:7:evicted 0 
STAT items:7:evicted_time 0 
STAT items:7:outofmemory 0 
STAT items:7:tailrepairs 0 
... etc 
END 
stats cachedump 7 100 
ITEM __builtin__.str_is_browser_supported·user_agent_hash=5706b885fdad3f7049dfb39455dfa7ab10086d97 [269 b; 1298926467 s] 
END 

Merci à Graham King's blog post pour cette belle petite recette.