March 05, 2007
久々に cool な CPAN モジュールを紹介してみたりする。
memcached を Cache::Memcached から操作してると、キーの一覧が取得したい時があったりして、まぁ、memcached の仕様的にはそれが出来ないんですが、Cache::Memcached::Indexable というモジュールを使うことによって、取得出来る風です。
風ってだけに、実際は違うんですが。
memcached を Cache::Memcached から操作してると、キーの一覧が取得したい時があったりして、まぁ、memcached の仕様的にはそれが出来ないんですが、Cache::Memcached::Indexable というモジュールを使うことによって、取得出来る風です。
風ってだけに、実際は違うんですが。
概念的には Cache::Memcached 風のインターフェースで、
set() やら get() やら delete() する時に、そのキーから、数パターンに納まる、本当に保存すべき key を取ってきて、そこに保存された、ちょっと大き目の hashref から、保存したり、取り出したり、削除したりするって概念。use strict;
use Cache::Memcached::Indexable;
use Data::Dumper;
my $memd = Cache::Memcached::Indexable->new({
servers => [ 'localhost:11211' ],
logic => 'Cache::Memcached::Indexable::Logic::DigestSHA1',
});
$memd->set(foo => 'FOO');
$memd->set(bar => 'BAR');
$memd->set(baz => 'BAZ');
$memd->set(jitensya => 'JITENSYA');
$memd->set(hoge => 'SASHIMI');
my %all = ();
for my $key ($memd->keys) {
$all{$key} = $memd->get($key);
}
warn Dumper \%all;
こんなんしてみると
$VAR1 = {
'bar' => 'BAR',
'baz' => 'BAZ',
'foo' => 'FOO',
'jitensya' => 'JITENSHA',
'hoge' => 'SASHIMI'
};
keys() メソッド経由で全ての key が取り出せているのがわかります。思い付きってレベルじゃねぇぞ。
実際思い付きなので無保証なかんじです。
あと、memcached は 1.2.x 系でのご利用を推奨します。