summary refs log tree commit diff
path: root/lib/Plack/Middleware/APIRateLimit/Backend/Redis.pm
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--lib/Plack/Middleware/APIRateLimit/Backend/Redis.pm43
1 files changed, 43 insertions, 0 deletions
diff --git a/lib/Plack/Middleware/APIRateLimit/Backend/Redis.pm b/lib/Plack/Middleware/APIRateLimit/Backend/Redis.pm
new file mode 100644
index 0000000..e647f6a
--- /dev/null
+++ b/lib/Plack/Middleware/APIRateLimit/Backend/Redis.pm
@@ -0,0 +1,43 @@
+package Plack::Middleware::APIRateLimit::Backend::Redis;
+
+use Moose;
+extends 'Plack::Middleware::APIRateLimit::Backend';
+
+use AnyEvent::Redis;
+
+has store => (
+    is      => 'rw',
+    isa     => 'AnyEvent::Redis',
+    lazy    => 1,
+    default => sub {
+        return AnyEvent::Redis->new(
+            host => '127.0.0.1',
+            port => 6378,
+        );
+    }
+);
+
+sub BUILD {
+    my $self = shift;
+    if (scalar @_) {
+        $self->store(AnyEvent::Redis->new(@_));
+    }
+    return $self;
+}
+
+sub get {
+    my ( $self, $key ) = @_;
+    my $val = $self->store->get($key)->recv;
+    if ( !$val ) {
+        $self->store->set( $key => 1 )->recv;
+        $val = 1;
+    }
+    return $val;
+}
+
+sub incr {
+    my ($self, $key) = @_;
+    return $self->store->incr($key)->recv;
+}
+
+1;