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 )