Revision 459 (by ahitrov, 2014/12/03 17:02:12) |
Cache::Memcached to Cache::Memcached::Fast upgrade
|
package Contenido::Cache::MemcachedBackend;
use strict;
use warnings 'all';
use Cache::Memcached::Fast;
#########################################
# Cache::Backend interface implementation
#########################################
my $memd;
sub new {
my ($class, $opts) = @_;
my $implementation = $opts->{mc_backend};
$memd ||= $implementation->new({
servers => $$opts{mc_servers},
namespace => $$opts{mc_namespace},
});
bless {memd=>$memd}, $class;
}
sub delete_key {
my ($self, $nspace, $key) = @_;
$$self{memd}->delete($self->_make_key($nspace, $key));
}
sub delete_namespace {
my ($self, $nspace) = @_;
$self->_not_implemented('delete_namespace');
}
sub get_keys {
my ($self, $nspace) = @_;
$self->_not_implemented('get_keys');
}
sub get_namespaces {
my ($self) = @_;
$self->_not_implemented('get_namespaces');
}
sub get_size {
my ($self, $nspace, $key) = @_;
my $val = $self->restore($nspace, $key);
defined($val) ? length($val) : undef;
}
sub restore {
my ($self, $nspace, $key) = @_;
$$self{memd}->get($self->_make_key($nspace, $key));
}
sub store {
my ($self, $nspace, $key, $val) = @_;
$$self{memd}->set($self->_make_key($nspace, $key), $val);
}
###################
# Internal routines
###################
sub _make_key {
my $self = shift;
join ':', map {defined($_) ? $_ : ''} @_;
}
sub _not_implemented {
my ($self, $meth) = @_;
warn "WARNING! ".ref($self)."::$meth not implemented\n";
}
1;