2008年6月4日水曜日

memcached でキーの列挙(2)

前回(memcached でキーの列挙)の続きです。サンプルの Perl コードです。ちょこっといじればイベント駆動のモジュールが作れそう。。

my $size = 1000;
my $cache = Cache::Memcached->new({
servers => ['localhost:11211'],
});
my $slabs = $cache->stats('slabs');
my @stat_ids = ();
for my $host (keys %{$slabs->{hosts}}) {
my $slabs_text = $slabs->{hosts}->{$host}->{slabs};
my @lines = split("\n", $slabs_text);
for my $line (@lines) {
($line =~ /STAT ([0-9]+):chunk_size [0-9]+/) or next;
push(@stat_ids, $1);
}
}
for my $stat_id (@stat_ids) {
my $cmd = "cachedump $stat_id $size";
print "[$cmd]\n";
my $cachedump = $cache->stats($cmd);
for my $host (keys %{$cachedump->{hosts}}) {
my $cachedump_text = $cachedump->{hosts}->{$host}->{$cmd};
my @lines = split("\n", $cachedump_text);
for my $line (@lines) {
($line =~ /^ITEM (.+) \[(.+) b; (.+) s\]/) or next;
my ($key, $b, $s) = ($1, $2, $3);
print "\t$key [$b bytes]\n";
}
}
}

1 件のコメント:

djodjo さんのコメント...

はじめまして。djodjoといいます。
参考にさせていただきました。ありがとうございます。
試したところ、気付いたので恐縮ですがご報告。
s/chunk_size/used_chunks/
で、ないと全件取れませんでした。
http://djodjo.jp/archives/379