Class: RateLimiter::Storage::Redis

Inherits:
Base
  • Object
show all
Defined in:
lib/rate_limiter/storage/redis.rb

Constant Summary collapse

EXPIRATION_TIME =

60 seconds = 1 minute

60

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Redis

Returns a new instance of Redis.



7
8
9
10
11
12
13
14
15
16
17
# File 'lib/rate_limiter/storage/redis.rb', line 7

def initialize(options = {})
  default_options = {
    host: 'localhost',
    port: 6379
  }

  default_options[:namespace] = 'rate_limiter'

  @options = default_options.merge(options)
  @redis = ::Redis.new(@options)
end

Instance Method Details

#add_request(client_id) ⇒ Object



19
20
21
22
23
24
25
# File 'lib/rate_limiter/storage/redis.rb', line 19

def add_request(client_id)
  key = cache_key(client_id)
  @redis.multi do |redis|
    redis.lpush(key, Time.now.to_i)
    redis.expire(key, EXPIRATION_TIME)
  end
end

#requests_in_last_minute(client_id) ⇒ Object



27
28
29
30
31
32
33
34
# File 'lib/rate_limiter/storage/redis.rb', line 27

def requests_in_last_minute(client_id)
  key = cache_key(client_id)
  one_minute_ago = Time.now.to_i - EXPIRATION_TIME
  
  @redis.lrange(key, 0, -1).map(&:to_i).select do |timestamp|
    timestamp > one_minute_ago
  end
end