obtenir toutes les clés définies dans memcached
Comment puis-je obtenir toutes les clés définies dans mes instances memcached?
J'ai essayé de googler, mais je n'ai pas trouvé grand - chose sauf que PHP
supporte un getAllKeys
Méthode , ce qui signifie qu'il est réellement possible de le faire d'une manière ou d'une autre. Comment puis-je obtenir la même chose dans une session telnet?
J'ai essayé toutes les options liées à la récupération mentionnées dans memcached cheat sheet et memcached telnet command summary , mais aucune d'entre elles ne fonctionne et je suis à court de trouver la bonne façon pour ce faire.
Note: je le fais actuellement en développement, Donc on peut supposer qu'il n'y aura pas de problèmes en raison de nouvelles clés ou d'autres conditions de course, et le nombre de clés sera également limité.
6 réponses
Trouvé un moyen, grâce au lienici (avec la discussion de groupe google originale ici )
Tout d'abord, Telnet
sur votre serveur:
telnet 127.0.0.1 11211
Ensuite, listez les éléments pour obtenir les ID de dalle:
stats items STAT items:3:number 1 STAT items:3:age 498 STAT items:22:number 1 STAT items:22:age 498 END
Le premier numéro après 'items' est l'id de dalle. Demande un vidage de cache pour chaque ID de dalle, avec une limite pour le nombre maximum de clés à vider:
stats cachedump 3 100 ITEM views.decorators.cache.cache_header..cc7d9 [6 b; 1256056128 s] END stats cachedump 22 100 ITEM views.decorators.cache.cache_page..8427e [7736 b; 1256056128 s] END
memdump
Il y a une commande memdump
pour cela (memcdump
dans Ubuntu, une partie de libmemcached-tools
), par exemple:
memdump --servers=localhost
Qui renverra toutes les clés.
memcached-tool
Dans la version récente de memcached
, il est également memcached-tool
commande, par exemple
memcached-tool localhost:11211 dump | less
Qui vide toutes les clés et valeurs.
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 est testé avec Ubuntu 12.04 et un localhost memcached, 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 parcourt toutes les dalles de cache et imprime 1000 entrées de chacune.
Veuillez connaître certaines limites de ce script, c'est-à-dire qu'il ne peut pas évoluer pour un serveur de cache de 5 Go par exemple. Mais c'est utile à des fins de débogage sur un local machine.
, Le plus simple est d'utiliser python-memcached-logiciels de 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',
... ]
Si vous avez installé PHP & PHP-memcached, vous pouvez exécuter
$ php -r '$c = new Memcached(); $c->addServer("localhost", 11211); var_dump( $c->getAllKeys() );'
Bash
Pour obtenir la liste des clés dans Bash, suivez ces étapes.
Tout d'abord, définissez la fonction wrapper suivante pour la rendre simple à utiliser (copier et coller dans shell):
function memcmd() {
exec {memcache}<>/dev/tcp/localhost/11211
printf "%s\n%s\n" "$*" quit >&${memcache}
cat <&${memcache}
}
Memcached 1.4.31 et plus
Vous pouvez utiliser la commande lru_crawler metadump all
pour vider (la plupart) des métadonnées pour (tous) les éléments du cache.
Par opposition à
cachedump
, il ne provoque pas de problèmes de performance graves et n'a aucune limite sur la quantité de clés qui peuvent être déverser.
Exemple de commande en utilisant la fonction précédemment définie:
memcmd lru_crawler metadump all
Voir: ReleaseNotes1431.
Memcached 1.4.30 et ci-dessous
Récupère la liste des dalles à l'aide de la commande items statistics , par exemple:
memcmd stats items
Pour chaque classe slub, vous pouvez obtenir la liste des éléments en spécifiant l'id slub ainsi que le numéro 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 memcached serveur.
Pour lister toutes les clés de tous les stubs, voici le One-liner (par 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 pourrait causer de graves problèmes de performances lors de l'accès aux éléments, il n'est donc pas conseillé de s'exécuter en direct.
Notes:
stats cachedump
ne vide que leHOT_LRU
(IIRC?), qui est géré par un thread d'arrière-plan lorsque l'activité se produit. Cela signifie que sous une nouvelle version que le 2Q algo a activée, vous obtiendrez un instantané il n'y a que des vues sur ce qu'il y a dans l'un des LRU.Si vous voulez tout voir,
lru_crawler metadump 1
(oulru_crawler metadump all
) est la nouvelle méthode principalement prise en charge officiellement qui va vider asynchrone autant de clés que vous le souhaitez. vous les obtiendrez en panne, mais il frappe tous les LRU, et à moins que vous ne supprimiez/remplaciez des éléments, plusieurs exécutions devraient donner les mêmes résultats.
Source: GH-405 .
Connexes:
- liste tous les objets dans memcached
- Écrire un client Redis en pur bash (c'est Redis, mais approche très similaire)
- vérifiez les autres commandes disponibles à https://memcached.org/wiki
- découvrez la
protocol.txt
fichier docs.