Class: RateLimiter::Storage::Redis
- Defined in:
- lib/rate_limiter/storage/redis.rb
Constant Summary collapse
- EXPIRATION_TIME =
60 seconds = 1 minute
60
Instance Method Summary collapse
- #add_request(client_id) ⇒ Object
-
#initialize(options = {}) ⇒ Redis
constructor
A new instance of Redis.
- #requests_in_last_minute(client_id) ⇒ Object
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( = {}) = { host: 'localhost', port: 6379 } [:namespace] = 'rate_limiter' @options = .merge() @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 || > one_minute_ago end end |