Algorithm-FloodControl

 view release on metacpan or  search on metacpan

lib/Algorithm/FloodControl/Backend/Cache/FastMmap.pm  view on Meta::CPAN

package Algorithm::FloodControl::Backend::Cache::FastMmap;

use utf8;
use strict;
use warnings;

use Params::Validate qw/:all/;
use base 'Algorithm::FloodControl::Backend';
__PACKAGE__->mk_accessors( qw/storage prefix expires/ );

=head2 increment

=cut

sub increment {
    my ( $self )       = @_;
    my $last_value   = $self->storage->get_and_set( 
        $self->_tail_name,  
        sub { $_[1] = ( $_[1] || 0 ) + 1 }
    );    # If it does not exists
    $self->storage->set( $self->_item_name($last_value ) => time + $self->expires, $self->expires );
    return 1;
}

=head2 clear

=cut

sub clear {
    my ($self) = @_;
    return $self->storage->remove( $self->_tail_name );
}


=head2 get_item

=cut

sub get_item {
    my $self = shift;
    my $item = shift;
    return $self->storage->get( $self->_item_name($item) );
}

sub _last_number {
    my $self = shift;
    return $self->storage->get( $self->_tail_name );
}

sub _tail_name {
    my $self = shift;
    return $self->prefix . "_end";
}

sub _item_name {
    my $self = shift;
    my $item = shift;
    return $self->prefix . "_$item";
}

1;




( run in 0.446 second using v1.01-cache-2.11-cpan-f0fbb3f571b )