Line # Revision Author
1 3 ahitrov@rambler.ru package Contenido::Cache::MemcachedBackend;
2
3 use strict;
4 use warnings 'all';
5
6 use Cache::Memcached;
7
8
9 #########################################
10 # Cache::Backend interface implementation
11 #########################################
12
13 my $memd;
14
15 sub new {
16 my ($class, $opts) = @_;
17 my $implementation = $opts->{mc_backend};
18 $memd ||= $implementation->new({
19 servers => $$opts{mc_servers},
20 debug => $$opts{mc_debug},
21 namespace => $$opts{mc_namespace},
22 });
23 bless {memd=>$memd}, $class;
24 }
25
26 sub delete_key {
27 my ($self, $nspace, $key) = @_;
28 $$self{memd}->delete($self->_make_key($nspace, $key));
29 }
30
31 sub delete_namespace {
32 my ($self, $nspace) = @_;
33 $self->_not_implemented('delete_namespace');
34 }
35
36 sub get_keys {
37 my ($self, $nspace) = @_;
38 $self->_not_implemented('get_keys');
39 }
40
41 sub get_namespaces {
42 my ($self) = @_;
43 $self->_not_implemented('get_namespaces');
44 }
45
46 sub get_size {
47 my ($self, $nspace, $key) = @_;
48 my $val = $self->restore($nspace, $key);
49 defined($val) ? length($val) : undef;
50 }
51
52 sub restore {
53 my ($self, $nspace, $key) = @_;
54 $$self{memd}->get($self->_make_key($nspace, $key));
55 }
56
57 sub store {
58 my ($self, $nspace, $key, $val) = @_;
59 $$self{memd}->set($self->_make_key($nspace, $key), $val);
60 }
61
62
63 ###################
64 # Internal routines
65 ###################
66
67 sub _make_key {
68 my $self = shift;
69 join ':', map {defined($_) ? $_ : ''} @_;
70 }
71
72 sub _not_implemented {
73 my ($self, $meth) = @_;
74 warn "WARNING! ".ref($self)."::$meth not implemented\n";
75 }
76
77 1;