[Dbix-class] Caching total_entires in the Pager -- how can build a
good cache key?
Bill Moseley
moseley at hank.org
Thu Aug 8 18:51:47 GMT 2013
I have a REST app that returns collections a page at a time. So, part of
that response is the Data::Page object.
There is some overhead with fetching the total_entires each time I query
for the next page of results, and in my case it doesn't change frequently.
So, I'm thinking about caching.
For example:
my $pager =3D $rs->pager;
if ( my $count =3D $cache->get( $key ) ) {
$pager->total_entires( $count );
}
else {
$cache->set( $key, $pager->total_entries, $timeout_seconds );
}
That is, populate total_entries from cache if I have it.
The problem is what to use for the cache key. This seems to work, but
looks rather ugly. Is there a better way? Mostly copied from the pager()
method.
my %attrs =3D %{$rs->{attrs}};
delete $attrs{$_} for qw/rows offset page pager/;
my $trs =3D (ref $rs)->new($rs->result_source, \%attrs)->count_rs;
my ( $sql, @bind ) =3D @{${$trs->as_query}};
my $key =3D join ':', $sql, grep { !ref } map { @{$_} } @bind;
-- =
Bill Moseley
moseley at hank.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.scsys.co.uk/pipermail/dbix-class/attachments/20130808/e62=
b3f25/attachment.htm
More information about the DBIx-Class
mailing list