Hello. This is what i use - example in attach.
And in your schema class you could override 'load_components' method to use
that resultset class for all of your sources:
sub load_classes {
my $self = shift;
my $ret = $self->SUPER::load_classes(@_);
$self->source($_)->resultset_class('My::ResultSet')
for $self->sources;
return $ret;
}
Usage is simple:
my @objs = $rs->search({COND}, {ATTRS, memcache => 3600});
my $num = $rs->count({COND}, {memcache => 3600});
Cache is on only when memcache attr is present.
What is cached:
- $rs->all (aka search in list context)
- $rs->find
- $rs->single
- $rs->count
Iterators are not cached.
2007/5/8, Matt S Trout <[EMAIL PROTECTED]>:
On Thu, Apr 19, 2007 at 10:50:51AM -0700, Evaldas Imbrasas wrote:
> Hi there,
>
> Is anyone using memcached to cache DBIC objects? It would be ideal if
> there was a possibility to define memcached as a caching layer in DBIC
> and just it transparently.
I'd love to see this implemented but haven't had time to make it happen
myself yet. If you're interesting in getting your feet wet I can give you
a branch off -current to hack in and guide you through the design I had in
mind.
--
Matt S Trout Need help with your Catalyst or DBIx::Class
project?
Technical Director Want a managed development or deployment platform?
Shadowcat Systems Ltd. Contact mst (at) shadowcatsystems.co.uk for a
quote
http://www.shadowcatsystems.co.uk/
_______________________________________________
List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
Wiki: http://dbix-class.shadowcatsystems.co.uk/
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
Searchable Archive:
http://www.mail-archive.com/dbix-class@lists.rawmode.org/
package My::ResultSet;
use base qw/DBIx::Class::ResultSet/;
use strict;
use Storable;
use Digest::MD5;
__PACKAGE__->mk_classaccessors(qw/memd/);
sub single {
my ($self, $where, $attrs) = @_;
if ( my $cache_time = $attrs->{memcache} ||
$self->_resolved_attrs->{memcache} and
( my $memd ||= $self->memd )
)
{
my $key = 'S-'.getCacheKey([$self->_resolved_attrs, $where, $attrs]);
my $obj;
return $obj if !$attrs->{expire} and $obj = $memd->get($key);
$obj = $self->SUPER::single($where);
$memd->set($key, $obj, $cache_time);
return $obj;
}
return $self->SUPER::single($where);
}
sub all {
my $self = shift;
if ( my $cache_time = (my $attrs = $self->_resolved_attrs)->{memcache} and
( my $memd ||= $self->memd )
)
{
my $key = 'A-'.getCacheKey($attrs);
my $objs;
return @$objs if !$attrs->{expire} and $objs = $memd->get($key);
@$objs = $self->SUPER::all(@_);
$memd->set($key, $objs, $cache_time);
return @$objs;
}
return $self->SUPER::all(@_);
}
sub _count {
my $self = shift;
if ( my $cache_time = (my $attrs = $self->_resolved_attrs)->{memcache} and
( my $memd ||= $self->memd )
)
{
my $key = 'C-'.getCacheKey($attrs);
my $count;
return $count if !$attrs->{expire} && defined ($count =
$memd->get($key));
$count = $self->SUPER::_count(@_);
$memd->set($key, $count, $cache_time);
return $count;
}
return $self->SUPER::_count(@_);
}
sub getCacheKey {
local $Storable::canonical = 1;
Digest::MD5::md5_hex(Storable::freeze($_[0]));
}
1;
_______________________________________________
List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
Wiki: http://dbix-class.shadowcatsystems.co.uk/
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
Searchable Archive: http://www.mail-archive.com/dbix-class@lists.rawmode.org/