class TieredCaching::CacheLine

Attributes

name[R]
tiers[R]

Public Class Methods

new(name) click to toggle source
# File lib/tiered_caching/cache_line.rb, line 4
def initialize(name)
  @name = name
  @tiers = []
  @local_tiers = []
end

Public Instance Methods

<<(tier) click to toggle source
# File lib/tiered_caching/cache_line.rb, line 10
def <<(tier)
  tiers << tier
end
append_local_cache(tier) click to toggle source
# File lib/tiered_caching/cache_line.rb, line 14
def append_local_cache(tier)
  @local_tiers << tier
  self << tier
end
clear(depth = -1) click to toggle source
# File lib/tiered_caching/cache_line.rb, line 39
def clear(depth = -1)
  if depth == -1
    tiers.map(&:clear)
  else
    tiers[0...depth].map(&:clear)
  end
end
clear_local() click to toggle source
# File lib/tiered_caching/cache_line.rb, line 35
def clear_local
  @local_tiers.map(&:clear)
end
delete(key) click to toggle source
# File lib/tiered_caching/cache_line.rb, line 31
def delete(key)
  @tiers.map { |tier| tier.delete(key) }
end
get(key) click to toggle source
# File lib/tiered_caching/cache_line.rb, line 23
def get(key)
  internal_get(key)
end
getset(key, &block) click to toggle source
# File lib/tiered_caching/cache_line.rb, line 27
def getset(key, &block)
  get(key) || set(key, &block)
end
set(key, value = nil) { || ... } click to toggle source
# File lib/tiered_caching/cache_line.rb, line 19
def set(key, value = nil)
  (value || yield).tap { |value| tiers.map { |store| store.set(key, value) } }
end

Private Instance Methods

internal_get(key, tier_index = 0) click to toggle source
# File lib/tiered_caching/cache_line.rb, line 51
def internal_get(key, tier_index = 0)
  return nil if tier_index >= tiers.count

  tier = tiers[tier_index]
  tier.get(key) || begin
    Logging.logger.warn("#{name}: Cache miss at level #{tier_index}")
    result = internal_get(key, tier_index + 1)
    result && tier.set(key, result)
  end
end