package Autocache::Strategy::Store::Memcached;
use Any::Moose;
extends 'Autocache::Strategy';
use Cache::Memcached;
use Autocache::Logger qw(get_logger);
#
# Null Memcached Strategy - never expire, memcached
#
has '_memcached' => (
is => 'ro',
init_arg => 'memcached', );
#
# get REQ
#
sub get
{
my ($self,$req) = @_;
get_logger()->debug( "get: " . $req->key );
return $self->_memcached->get( $req->key );
}
#
# set KEY RECORD
#
sub set
{
my ($self,$req,$rec) = @_;
get_logger()->debug( "set: " . $req->key );
$self->_memcached->set( $req->key, $rec, 0 );
}
#
# delete KEY
#
sub delete
{
my ($self,$key) = @_;
get_logger()->debug( "delete" );
$self->_memcached->delete( $key );
}
around BUILDARGS => sub
{
my $orig = shift;
my $class = shift;
if( ref $_[0] )
{
my $config = $_[0];
my %args;
my $servers = $config->get_node( 'servers' )->value || '127.0.0.1';
my @servers = split /\s+/, $servers;
$args{servers} = \@servers;
if( $config->get_node( 'compress_threshold' ) )
{
$args{compress_threshold} = $config->get_node( 'compress_threshold' )->value;
}
return $class->$orig( memcached => Cache::Memcached->new( %args ) );
}
else
{
return $class->$orig(@_);
}
};
no Any::Moose;
__PACKAGE__->meta->make_immutable;
1;