私はDBIx :: Classベースのモデルでこの同じ必要性に遭遇しました。ここで答えを見直した後、私が探している解決策は実際には見当たりません。この問題に苦しんだ後、私は自分のビジネス層がキャッシュを処理すべきだと考え始めました。私はDBIx :: Classをビジネスロジックを実装していないパーシスタンス層として扱います。私は DBIx ::クラススキーマの初期化
時に設定した$のmemcachedのキャッシュから提供され
my $network = SL::Model::App->resultset('Network')->search({ ip => '127.0.0.1' });
と$ネットワークオブジェクト:
は例えば、理想的なキャッシングと私の現在のコードは次のようなものになるだろう
新しいコードは次のようになります。
my $network = SL::Network->find_by_ip_or_create({ ip => '127.0.0.1' });
一方、近くのモジュールで:
package SL::Network;
...
use SL::Model::App;
use SL::Cache;
our $cache = SL::Cache->new;
sub find_by_ip_or_create {
my ($class, $args) = @_;
my $network;
unless ($network = $cache->get('network|' . $args->{ip}) {
$network = SL::Model::App->resultset('Network')->find_or_create({ wan_ip => $args->{ip}});
$cache->set('network|' . $args->{ip} => DBIx::Class::Schema->freeze($network));
}
return $network;
}
あなたはそのアイデアを得ます。
あなたは、これは非常に限られた使用のためにキャッシュされ、私は理解し何からhttp://www.google.com/search?q=DBIx%3A%3AClass+caching –