舌足らずすぎた。
Model::DBIC:
connect_info:
- dbi:mysql:table
- root
- on_connect_do:
- SET NAMES utf8
cursor_class: DBIx::Class::Cursor::Cached
cache_file: __path_to(tmp/query_cache)__
さっきはこんなconfigで使った場合のコードです。
DBIx::Class::Cursor::Cachedつかってみた
すばらしすぎる。もっと早く使えばよかったとおもった。
Catalyst::Model::DBIC::Schema
で使う場合はこんな感じでOK。
sub new {
my $self = shift->NEXT::new(@_);
my $cache = Cache::FastMmap->new( share_file => $self->{cache_file} );
$self->schema->default_resultset_attributes({
cache_object => $cache,
});
$self;
}
そんで、あとはsearchのattrとして { cache_for => 300 } とかかいてやればそのクエリは300秒キャッシュされる。
実際にはsearch時ではなくてallとかnextのときにそのクエリをキャッシュしてる。
ちなみにdefault_resultset_attributes
にcache_for
を含めるとすべてのクエリがキャッシュされる。
lighttpd+fastcgiで
fastcgiだけ再起動したい場合に、再起動中にアクセスあるとfastcgiプロセスが上がったあとも500になってしまうことがあるのだけど、みんなどうしてる?