Class: Muninn::Cache::VersionCounter

Inherits:
Object
  • Object
show all
Defined in:
lib/muninn/cache/version_counter.rb

Constant Summary collapse

KEY_PREFIX =
"cache:version".freeze

Class Method Summary collapse

Class Method Details

.build_key(namespace:, scope_name:, scope_id:) ⇒ Object



36
37
38
# File 'lib/muninn/cache/version_counter.rb', line 36

def self.build_key(namespace:, scope_name:, scope_id:)
  [KEY_PREFIX, scope_name, scope_id, namespace].join(":")
end

.bump(namespace:, scope_name:, scope_id:, expires_in: nil) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/muninn/cache/version_counter.rb', line 17

def self.bump(namespace:, scope_name:, scope_id:, expires_in: nil)
  Muninn.instrument("version_counter.bump", namespace: namespace, scope_name: scope_name, scope_id: scope_id) do
    key = build_key(namespace: namespace, scope_name: scope_name, scope_id: scope_id)

    if expires_in
      results = Muninn.redis.pipelined do |pipe|
        pipe.incr(key)
        pipe.expire(key, expires_in)
      end
      results.first
    else
      Muninn.redis.incr(key)
    end
  end
rescue Redis::BaseError => e
  Rails.logger.warn "[Muninn] Redis error in VersionCounter.bump: #{e.message}"
  nil
end

.get(namespace:, scope_name:, scope_id:) ⇒ Object



8
9
10
11
12
13
14
15
# File 'lib/muninn/cache/version_counter.rb', line 8

def self.get(namespace:, scope_name:, scope_id:)
  Muninn.instrument("version_counter.get", namespace: namespace, scope_name: scope_name, scope_id: scope_id) do
    Muninn.redis.get(build_key(namespace: namespace, scope_name: scope_name, scope_id: scope_id))
  end&.then { |v| v ? v.to_i : 0 }.to_i
rescue Redis::BaseError => e
  Rails.logger.warn "[Muninn] Redis error in VersionCounter.get: #{e.message}"
  0
end