Apache-Cache
view release on metacpan or search on metacpan
lib/Apache/Cache.pm view on Meta::CPAN
$x -= 2;
}
}
foreach my $name (qw(cachename namespace))
{
croak("$pkg object creation missing $name parameter.")
unless(defined($options->{$name}) && $options->{$name} ne '');
}
my $self = $class->SUPER::new(@_, namespace=>$options->{namespace});
return(undef()) unless(defined($self));
$self->{cache_options} = $options;
unless($self->SUPER::exists($options->{cachename}, $self->_lock_timeout))
{
return(undef()) if($self->SUPER::status eq FAILURE);
$self->_init_cache || return undef;
}
bless($self, $class);
return($self);
}
=pod
=head2 set (identifier => data, [timeout])
lib/Apache/Cache.pm view on Meta::CPAN
if(defined $lock_timeout ? $self->lock(LOCK_EX, $lock_timeout) : $self->lock(LOCK_EX|LOCK_NB))
{
my $data = $self->_get_datas || return(undef());
$data->{$key} = $value;
$data->{'_cache_metadata'}->{'timestamps'}->{$key} = $timeout;
push(@{$data->{'_cache_metadata'}->{'queue'}}, $key);
$self->_check_keys($data);
$self->_check_size($data);
$self->SUPER::set($self->{cache_options}->{cachename}=>$data, NOWAIT);
my $rv = $self->status; # saving returned status
$self->unlock; # don't wait for Apache::SharedMem to auto unlock on destroy
return(undef()) if($rv eq FAILURE);
return($value);
}
else
{
$self->_set_error('can\'t get exclusive lock for "set" method');
$self->_set_status(FAILURE);
lib/Apache/Cache.pm view on Meta::CPAN
my $rv = undef;
if(defined $lock_timeout ? $self->lock(LOCK_EX, $lock_timeout) : $self->lock(LOCK_EX|LOCK_NB))
{
my $data = $self->_get_datas || return(undef());
if(exists $data->{$key})
{
$rv = delete($data->{$key});
delete($data->{_cache_metadata}->{timestamps}->{$key});
$data->{_cache_metadata}->{queue} = \@{grep($_ ne $key, @{$data->{_cache_metadata}->{queue}})};
$self->SUPER::set($self->{cache_options}->{cachename}=>$data);
return(undef()) if($self->status & FAILURE);
}
$self->unlock;
}
return($rv);
}
=head2 clear
Remove all objects from the namespace associated with this cache instance.
lib/Apache/Cache.pm view on Meta::CPAN
{
my $self = shift;
my $cache_registry =
{
_cache_metadata =>
{
timestamps => {},
queue => [],
}
};
$self->SUPER::set($self->{cache_options}->{cachename}=>$cache_registry, $self->_lock_timeout);
return($self->SUPER::status eq FAILURE ? undef : 1);
}
sub _lock_timeout
{
my $self = shift;
my $lock_timeout = $self->{cache_options}->{default_lock_timeout};
return(defined $lock_timeout ? $lock_timeout : NOWAIT);
}
sub _get_datas
{
my $self = shift;
my $data = $self->SUPER::get($self->{cache_options}->{cachename}, $self->_lock_timeout);
if($self->status eq FAILURE)
{
$self->_set_error("can't get the cacheroot: ", $self->error);
return(undef());
}
croak("Apache::Cache: wrong data format.")
if(ref($data) ne 'HASH' || ! exists $data->{_cache_metadata});
return($data);
( run in 1.056 second using v1.01-cache-2.11-cpan-49f99fa48dc )