Apache-Session-Memcached
view release on metacpan or search on metacpan
lib/Apache/Session/Store/Memcached.pm view on Meta::CPAN
package Apache::Session::Store::Memcached;
use Cache::Memcached;
use strict;
use vars qw($VERSION);
$VERSION = '0.03';
sub new {
my($class,$session) = @_;
my $self;
my %opts = (
servers => ( ref $session->{args}->{Servers} eq 'ARRAY' )
? $session->{args}->{Servers} : [ split(/\s+/,$session->{args}->{Servers}) ],
no_rehash => $session->{args}->{NoRehash},
readonly => $session->{args}->{ReadOnly},
debug => $session->{args}->{Debug},
compress_threshold => $session->{args}->{CompressThreshold} || 10_000,
);
#use Data::Dumper;
#print STDERR Dumper $session->{args};
my $memd = new Cache::Memcached \%opts;
$self->{cache} = $memd;
bless $self,$class;
}
sub insert {
my($self,$session) = @_;
if ( $self->{cache}->get($session->{data}->{_session_id}) ) {
die "Object already exists in the data store.";
}
$self->{cache}->set($session->{data}->{_session_id},$session->{serialized});
}
sub update {
my($self,$session) = @_;
$self->{cache}->replace($session->{data}->{_session_id},$session->{serialized});
}
sub materialize {
my($self, $session) = @_;
$session->{serialized} = $self->{cache}->get($session->{data}->{_session_id}) or die 'Object does not exist in data store.';
}
sub remove {
my($self, $session) = @_;
$self->{cache}->delete($session->{data}->{_session_id});
}
1;
__END__
=head1 NAME
Apache::Session::Store::Memcached - Stores persistent data using memcached
(memory cache daemon) for Apache::Session storage
=head1 SYNOPSIS
tie %session, 'Apache::Session::Memcached', $sid, {
Servers => '10.0.0.1:20000 10.0.0.2:20000',
NoRehash => 1,
Readonly => 0,
Debug => 1,
CompressThreshold => 10_000
};
# use with another locking/generation/serializaion scheme
use Apache::Session::Flex;
tie %session, 'Apache::Session::Flex', $id, {
Store => 'Memcached',
Lock => 'Null',
Generate => 'MD5',
Serialize => 'Storable',
Servers => '10.0.0.1:20000 10.0.0.2:20000',
};
( run in 2.674 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )