Cache::Memcachedにコールバック
なんかすでにありそう。
コードはSledge::Cacheのまんまパクリ。
package Cache::Memcached::CallBack;
use strict;
use warnings;
use base 'Cache::Memcached';sub get_callback {
my ($self, $key, $callback, $expiry) = @_;my $data = $self->get($key);
return $data if defined $data;$data = $callback->();
$self->set( $key => $data , $expiry ) if defined $data;return $data;
}1;
↑の感じの拡張にすべきか
↓の感じの拡張にすべきか
package Cache::Memcached::CallBack;
use strict;
use warnings;sub import {
my $self = shift;
no strict 'refs';
*{"Cache\::Memcached\::get_callback"} = \&get_callback;
}sub get_callback {
my ($self, $key, $callback, $expiry) = @_;my $data = $self->get($key);
return $data if defined $data;$data = $callback->();
$self->set( $key => $data , $expiry ) if defined $data;return $data;
}1;
上の場合だと、
#! /usr/bin/perl
use strict;
use warnings;
use Cache::Memcached::CallBack;
use Proj::Data::User;
use Data::Dumper;my $key = 'proj_user';
my $cache = Cache::Memcached::CallBack->new({
servers => [ '127.0.0.1:11211' ],
});my $result = $cache->get_callback(
$key => sub { [ Proj::Data::User->retrieve(10) ] } , 5*60
);warn Dumper $result;
下の場合だと
#! /usr/bin/perl
use strict;
use warnings;
use Cache::Memcached;
use Cache::Memcached::CallBack;
use Proj::Data::User;
use Data::Dumper;my $key = 'proj_user';
my $cache = Cache::Memcached->new({
servers => [ '127.0.0.1:11211' ],
});my $result = $cache->get_callback(
$key => sub { [ Proj::Data::User->retrieve(10) ] } , 5*60
);warn Dumper $result;
こんな感じになる。
(追記)
本体にパッチるか。