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é.

99
demandé sur mu 無 2013-10-24 11:56:37

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

139
répondu mu 無 2015-03-16 17:06:28

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.

42
répondu kenorb 2018-08-06 13:06:24

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.

13
répondu Omar Al-Ithawi 2017-05-23 12:03:02

, 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',
 ... ]
4
répondu abhishek_M 2017-02-07 07:16:51

Si vous avez installé PHP & PHP-memcached, vous pouvez exécuter

$ php -r '$c = new Memcached(); $c->addServer("localhost", 11211); var_dump( $c->getAllKeys() );'
4
répondu RousseauAlexandre 2017-09-11 13:10:26

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 le HOT_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 (ou lru_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:

1
répondu kenorb 2018-08-06 13:49:29