Cache-Isolator
view release on metacpan or search on metacpan
lib/Cache/Isolator.pm view on Meta::CPAN
my $value;
my $try = 0;
TRYLOOP: while ( 1 ) {
$value = $self->get($key);
last TRYLOOP if $value;
$try++;
my @lockkeys = map { $key .":lock:". $_ } shuffle 1..$self->concurrency;
foreach my $lockkey ( @lockkeys ) {
my $locked = $self->cache->add($lockkey, 1, $self->timeout ); #lock
if ( $locked ) {
try {
$value = $self->get($key);
return 1 if $value;
$value = $cb->();
$self->set( $key, $value, $expires );
}
catch {
die $_;
}
finally {
( run in 0.525 second using v1.01-cache-2.11-cpan-49f99fa48dc )