Class: Gitlab::ApplicationRateLimiter::IncrementPerActionedResource

Inherits:
BaseStrategy
  • Object
show all
Defined in:
lib/gitlab/application_rate_limiter/increment_per_actioned_resource.rb

Instance Method Summary collapse

Constructor Details

#initialize(resource_key) ⇒ IncrementPerActionedResource

Returns a new instance of IncrementPerActionedResource.



6
7
8
# File 'lib/gitlab/application_rate_limiter/increment_per_actioned_resource.rb', line 6

def initialize(resource_key)
  @resource_key = resource_key
end

Instance Method Details

#increment(cache_key, expiry) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/gitlab/application_rate_limiter/increment_per_actioned_resource.rb', line 10

def increment(cache_key, expiry)
  with_redis do |redis|
    added, new_value = redis.pipelined do |pipeline|
      pipeline.sadd?(cache_key, resource_key)
      pipeline.scard(cache_key)
    end

    redis.expire(cache_key, expiry) if added && new_value == 1

    new_value
  end
end

#read(cache_key) ⇒ Object



23
24
25
26
27
# File 'lib/gitlab/application_rate_limiter/increment_per_actioned_resource.rb', line 23

def read(cache_key)
  with_redis do |redis|
    redis.scard(cache_key)
  end
end