summaryrefslogtreecommitdiff
path: root/lib/Plack/Middleware/APIRateLimit/Backend/Redis.pm
diff options
context:
space:
mode:
authorfranck cuny <franck@lumberjaph.net>2010-03-01 17:56:34 +0100
committerfranck cuny <franck@lumberjaph.net>2010-03-01 17:56:34 +0100
commit46fc47df0eace23987c3a4fa0518f4f87e7897ca (patch)
treee2c24bfda57972b0f6f44da8314c4c8d5bce894d /lib/Plack/Middleware/APIRateLimit/Backend/Redis.pm
parentinitial commit (diff)
downloadplack-middleware-apiratelimit-46fc47df0eace23987c3a4fa0518f4f87e7897ca.tar.gz
a middleware to throttle request on an API
Diffstat (limited to 'lib/Plack/Middleware/APIRateLimit/Backend/Redis.pm')
-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;