Quelle est la façon la plus simple de faire un dump de toutes les memcached clés dans un fichier?

C'est à partir d'un seul serveur memcache, avec près de 20M de touches (pas de date d'expiration), et autour de 2G de données.

Quel est le moyen le plus facile pour faire un dump de toutes les paires clé/valeur dans un fichier plat? J'ai d'abord regardé la java net.espion.memcached.MemcachedClient, mais ce client ne prend pas en charge l'obtention de toutes les clés (je pense). Si j'avais une liste de toutes les clés (que je n'ai pas), je pourrais facilement utiliser ce client de se concentrer toutes les valeurs.

Je sais que je peux obtenir toutes les touches à l'aide de quelques commandes telnet (par exemple, telnet localhost 11211; stats éléments; stats cachedump ), mais il n'est pas clair pour moi comment faire pour automatiser cette robuste.

EDIT: Voici ce que j'ai fait pour le faire fonctionner sur un jouet serveur memcache sur ma machine. Il semble fonctionner mais je n'en ai mis deux touches dans memcached, donc j'espère que cette méthode va à l'échelle ok:

commandes shell:

sudo yum install memcached
sudo /etc/init.d/memcached restart # maybe unnecessary
sudo yum install php
sudo yum install php-pecl-memcache
sudo service httpd reload

script php, basé sur cette:

<?php
$memcache = new Memcache();
$memcache->connect('127.0.0.1', 11211) or die ("Could not connect");
$list = array();
$allSlabs = $memcache->getExtendedStats('slabs');
$items = $memcache->getExtendedStats('items');
foreach($allSlabs as $server => $slabs) {
    foreach($slabs AS $slabId => $slabMeta) {
        if (!is_int($slabId)) {
            continue;
        }
        $cdump = $memcache->getExtendedStats('cachedump', (int) $slabId, 100000000);
        foreach($cdump AS $server => $entries) {
            if ($entries) {
                foreach($entries AS $eName => $eData) {
                    print_r($eName);
                    print_r(":");
                    $val = $memcache->get($eName);
                    print_r($val);
                    print_r("\n");
                }
            }
        }
    }
}
?>

EDIT2: Le script ci-dessus ne semble pas rendre tous les mappages. Si j'insère la ligne count($entries), il retourne uniquement un peu plus de 50k, même avec le paramètre de limite de jeu à 100M, mais l'exécution de stats items à partir de telnet affiche plus de 5 millions d'entrées. Personne ne sait à quoi cela peut-il être le cas?

EDIT3: Ce lien suggère que cachedump ne pas obtenir toutes les clés de memcache. J'ai atteint une limite d'environ 50k clés qui sont retournés soit par cachedump, ce script PHP, ou un script perl similaire à celui dans le lien fourni par Zach Bonham. Est-il un moyen de contourner cela?

InformationsquelleAutor jonderry | 2012-12-18