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