UNIX的なアレ

UNIX的なこととかいろいろ

memcachedでキー一覧を取得したい時に

実際のサービス運用時はないと思いますが、debugしているときやトラブルの調査をしているときにmemcachedのキー一覧を閲覧したいときはありますよね。
そんな時は、telnetを使って下記のコマンドを打つことでKey一覧を取得することができます。

 $ telnet localhost 11211
 stats items
STAT items:1:number 6
STAT items:1:age 20505
STAT items:1:evicted 0
STAT items:1:evicted_time 0
STAT items:1:outofmemory 0
STAT items:1:tailrepairs 0

 stats cachedump 1 100
ITEM foo [9 b; 1264464651 s]
ITEM bar [9 b; 1264464649 s]

ざっとこんな感じです。まずは、stats itemsでキャシュされているレコード情報を取得します。続いて、stats cachedumpでは先程得たレコード情報に書いてあるSlabIDを指定してやればいいだけです。ちなみに第二引数は取得する数です。
簡単ですね。
ワンライナーで強引に出してみるとこんな感じ・・・?相当強引ですが・・・なんかいい方法ありますかねぇ。

$ perl -MCache::Memcached -e '$s="localhost:11211";$m=new Cache::Memcached({servers=>[$s]});$res=$m->stats("items");$i=$res->{hosts}{$s}{items};@a=split("\n",$i);while(<@a>){if($_=~/items:([0-9]+)/){$s{$1}=$_}};foreach $key (keys %s){$cm="cachedump $key 100";$res=$m->stats($cm);print "--- \n".$cm."\n";print $res->{hosts}{$s}{$cm}}'