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 )