class Condenser::Cache::MemoryStore
Public: Basic in memory LRU cache.
Assign the instance to the Environment#cache.
environment.cache = Sprockets::Cache::MemoryStore.new(1000)
See Also
ActiveSupport::Cache::MemoryStore
Constants
- DEFAULT_MAX_SIZE
Internal: Default key limit for store.
- PER_ENTRY_OVERHEAD
Public Class Methods
new(options = {})
click to toggle source
# File lib/condenser/cache/memory_store.rb, line 18 def initialize(options = {}) @max_size = options[:size] || DEFAULT_MAX_SIZE @cache = {} @key_access = {} @cache_size = 0 end
Public Instance Methods
cached_size(key, value)
click to toggle source
# File lib/condenser/cache/memory_store.rb, line 37 def cached_size(key, value) key.to_s.bytesize + value.bytesize + PER_ENTRY_OVERHEAD end
clear()
click to toggle source
# File lib/condenser/cache/memory_store.rb, line 25 def clear @cache.clear @key_access.clear @cache_size = 0 end
get(key)
click to toggle source
# File lib/condenser/cache/memory_store.rb, line 31 def get(key) value = @cache[key] @key_access[key] = Time.now.to_f if value value end
inspect()
click to toggle source
Public: Pretty inspect
Returns String.
# File lib/condenser/cache/memory_store.rb, line 64 def inspect "#<#{self.class} size=#{@cache_size}/#{@max_size}>" end
prune()
click to toggle source
# File lib/condenser/cache/memory_store.rb, line 53 def prune keys = @key_access.keys.sort { |a, b| @key_access[a].to_f <=> @key_access[b].to_f } keys.each do |key| delete(key) return if @cache_size <= @max_size end end
set(key, value)
click to toggle source
# File lib/condenser/cache/memory_store.rb, line 41 def set(key, value) if old_value = @cache[key] @cache_size -= (old_value.bytesize - value.bytesize) else @cache_size += cached_size(key, value) end @cache[key] = value @key_access[key] = Time.now.to_f prune if @cache_size > @max_size value end