Comment obtenir toutes les clés définies dans ma ou mes instances memcached?
J'ai essayé de googler, mais je n'ai pas trouvé grand chose à part que PHP
supporte la méthode getAllKeys
, ce qui signifie qu'il est en fait possible de le faire. Comment puis-je obtenir la même chose dans une session telnet?
J'ai essayé toutes les options de récupération mentionnées dans aide-mémoire memcached et résumé de la commande telnet Memcached , mais aucune d'entre elles ne fonctionne et je ne parviens pas à trouver le bon chemin. pour faire ça.
Remarque: je suis actuellement en train de développer cela, donc on peut supposer qu'il n'y aura aucun problème en raison de la définition de nouvelles clés ou de la survenue de telles conditions de concurrence, et le nombre de clés sera également limité.
Trouver un moyen, grâce au lien ici (avec l'original discussion de groupe google ici )
Tout d'abord, Telnet
sur votre serveur:
telnet 127.0.0.1 11211
Ensuite, listez les éléments pour obtenir les identifiants de dalle:
éléments de statistiques Éléments STAT: 3: numéro 1 Éléments STAT: 3: 498 ans. : 22: 498 FIN
Le premier numéro après ‘items’ est l’identifiant de la dalle. Demandez un vidage de cache pour chaque identifiant de dalle, avec une limite pour le nombre maximal de clés à vider:
stats cachedump 3 100 ITEM views.decorators.cache.cache_header..cc7d9 [6 b; 1256056128 s] END Stats en cache 22 100 ITEM views.decorators.cache.cache_page..8427e [7736 b; 1256056128 s] FIN
memdump
Il existe une commande memcdump
(parfois memdump
) pour cela (partie de _libmemcached-tools
_), par exemple:
_memcdump --servers=localhost
_
qui retournera toutes les clés.
memcached-tool
_Dans la version récente de memcached
, il existe également une commande memcached-tool
, par exemple.
_memcached-tool localhost:11211 dump | less
_
qui décharge toutes les clés et les valeurs.
Voir également:
Base sur @ mu 無 répondez ici. J'ai écrit un script de vidage de cache.
Le script vide tout le contenu d'un serveur memcached. Il a été testé avec Ubuntu 12.04 et un membre localhost, de sorte que votre kilométrage peut varier.
#!/usr/bin/env bash
echo 'stats items' \
| nc localhost 11211 \
| grep -oe ':[0-9]*:' \
| grep -oe '[0-9]*' \
| sort \
| uniq \
| xargs -L1 -I{} bash -c 'echo "stats cachedump {} 1000" | nc localhost 11211'
Ce qu'il fait, il passe par toutes les dalles de cache et imprime 1000 entrées de chaque.
Veuillez tenir compte de certaines limites de ce script, par exemple, il peut ne pas s’adapter pour un serveur de cache de 5 Go par exemple. Mais c'est utile pour le débogage sur une machine locale.
Si vous avez installé PHP et PHP-memcached, vous pouvez exécuter
$ php -r '$c = new Memcached(); $c->addServer("localhost", 11211); var_dump( $c->getAllKeys() );'
Pour obtenir la liste des clés dans Bash, suivez ces étapes.
Tout d’abord, définissez la fonction d’emballage suivante pour la rendre simple à utiliser (copier-coller dans Shell):
_function memcmd() {
exec {memcache}<>/dev/tcp/localhost/11211
printf "%s\n%s\n" "$*" quit >&${memcache}
cat <&${memcache}
}
_
Vous pouvez utiliser la commande _lru_crawler metadump all
_ pour vider (la plupart des) métadonnées de (tous) les éléments du cache.
Contrairement à
cachedump
, il ne provoque pas de problèmes de performances graves et ne limite pas le nombre de clés pouvant être vidées.
Exemple de commande en utilisant la fonction définie précédemment:
_memcmd lru_crawler metadump all
_
Voir: ReleaseNotes1431 .
Obtenir la liste des dalles en utilisant la commande statistiques des articles , par exemple:
_memcmd stats items
_
Pour chaque classe de slub, vous pouvez obtenir une liste d'éléments en spécifiant l'ID de slub avec un nombre limite (_0
_ - illimité):
_memcmd stats cachedump 1 0
memcmd stats cachedump 2 0
memcmd stats cachedump 3 0
memcmd stats cachedump 4 0
...
_
Remarque: vous devez le faire pour chaque serveur memcached.
Pour lister toutes les clés de tous les stubs, voici le one-liner (par un serveur):
_for id in $(memcmd stats items | grep -o ":[0-9]\+:" | tr -d : | sort -nu); do
memcmd stats cachedump $id 0
done
_
Remarque: la commande ci-dessus peut entraîner de graves problèmes de performances lors de l'accès aux éléments. Il est donc déconseillé de l'exécuter en direct.
Remarques:
_
stats cachedump
_ ne vide que le _HOT_LRU
_ (IIRC?), Qui est géré par un thread d'arrière-plan au fur et à mesure de l'activité. Cela signifie que, sous une nouvelle version suffisamment compatible avec l'algorithme 2Q, vous obtiendrez des instantanés de ce qu'il y a dans l'un des LRU.Si vous souhaitez tout afficher, _
lru_crawler metadump 1
_ (ou _lru_crawler metadump all
_) est la nouvelle méthode généralement prise en charge officiellement qui dumpera de manière asynchrone autant de clés que vous le souhaitez. vous les obtiendrez hors service, mais toutes les unités LRU seront touchées. À moins que vous ne supprimiez/remplaciez des articles, plusieurs exécutions devraient donner les mêmes résultats.
Source: GH-405 .
Apparenté, relié, connexe:
protocol.txt
.Le moyen le plus simple est d’utiliser le paquet python-memcached-stats, https://github.com/abstatic/python-memcached-stats
La méthode keys () devrait vous aider.
Exemple -
from memcached_stats import MemcachedStats
mem = MemcachedStats()
mem.keys()
['key-1',
'key-2',
'key-3',
... ]