class Aws::LRUCache

A simple thread safe LRU cache
@api private

def [](key)

Returns:
  • (Object) -

Parameters:
  • key (String) --
def [](key)
  @mutex.synchronize do
    value = @entries[key]
    if value
      @entries.delete(key)
      @entries[key] = value unless value.expired?
    end
    @entries[key]&.value
  end
end

def []=(key, value)

Parameters:
  • value (Object) --
  • key (String) --
def []=(key, value)
  @mutex.synchronize do
    @entries.shift unless @entries.size < @max_entries
    # delete old value if exists
    @entries.delete(key)
    @entries[key] = Entry.new(value: value, expiration: @expiration)
    @entries[key].value
  end
end

def clear

def clear
  @mutex.synchronize do
    @entries.clear
  end
end

def initialize(options = {})

Options Hash: (**options)
  • :expiration (Integer) -- Expiration time in seconds
  • :max_entries (Integer) -- Maximum number of entries

Parameters:
  • options (Hash) --
def initialize(options = {})
  @max_entries = options[:max_entries] || 100
  @expiration = options[:expiration]
  @entries = {}
  @mutex = Mutex.new
end

def key?(key)

Returns:
  • (Boolean) -

Parameters:
  • key (String) --
def key?(key)
  @mutex.synchronize do
    @entries.delete(key) if @entries.key?(key) && @entries[key].expired?
    @entries.key?(key)
  end
end