CHI-Driver-LMDB
view release on metacpan or search on metacpan
lib/CHI/Driver/LMDB.pm view on Meta::CPAN
}
sub remove {
my ( $self, $key ) = @_;
$self->_in_txn(
sub {
my ( undef, $db ) = @_;
$db->del($key);
},
);
return;
}
sub clear {
my ($self) = @_;
$self->_in_txn(
sub {
my ( undef, $db ) = @_;
$db->drop;
},
);
return;
}
sub fetch_multi_hashref {
my ( $self, $keys ) = @_;
my $out = {};
$self->_in_txn(
sub {
my ( undef, $db ) = @_;
for my $key ( @{$keys} ) {
$out->{$key} = $db->get($key);
}
},
);
return $out;
}
sub store_multi {
my ( $self, $key_data, $set_options ) = @_;
croak 'must specify key_values' unless defined $key_data;
$self->_in_txn(
sub {
for my $key ( keys %{$key_data} ) {
$self->set( $key, $key_data->{$key}, $set_options );
}
},
);
return;
}
sub get_keys {
my ($self) = @_;
my @keys;
$self->_in_txn(
sub {
my ( undef, $db ) = @_;
my $cursor = $db->Cursor;
my ( $key, $value );
while (1) {
last unless eval { $cursor->get( $key, $value, MDB_NEXT ); 1 };
push @keys, $key;
}
return;
},
);
return @keys;
}
sub get_namespaces { croak 'not supported' }
around max_key_length => sub {
my ( $orig, $self, @args ) = @_;
my $rval = $self->$orig(@args);
my $real_max = $self->_lmdb_max_key;
return $rval > $real_max ? $real_max : $rval;
};
no Moo;
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
CHI::Driver::LMDB - use OpenLDAPs LMDB Key-Value store as a cache backend.
=head1 VERSION
version 0.002004
=head1 SYNOPSIS
use CHI;
my $cache = CHI->new(
driver => 'LMDB',
root_dir => 'some/path',
namespace => "My::Project",
);
See L<C<CHI> documentation|CHI> for more details on usage.
=head1 ATTRIBUTES
=head2 C<dir_create_mode>
What mode (if any) to use when creating C<root_dir> if it does not exist.
->new(
# Default is 775 = rwxr-xr-x
dir_create_mode => oct 666,
);
=head2 C<root_dir>
( run in 3.147 seconds using v1.01-cache-2.11-cpan-cdf2f3d4e48 )