Spec-Zone.ru › Ruby on Rails 4.2

класс ActiveSupport::Cache::MemoryStore

Родитель:
ActiveSupport::Cache::Store

Реализация кэша, хранящего все данные в памяти в том же процессе. Если у вас несколько процессов Ruby on Rails (например, при использовании mongrel_cluster или Phusion Passenger), это означает, что экземпляры процессов Rails не смогут обмениваться данными кэша друг с другом, и в таком случае этот кэш может быть неподходящим.

Этот кэш имеет ограниченный размер, задаваемый параметром :size при инициализации (по умолчанию 32 МБ). Когда кэш превышает отведённый размер, происходит очистка, которая пытается уменьшить кэш до трёх четвертей максимального размера, удаляя наименее используемые записи.

MemoryStore потокобезопасен.

Константы

PER_ENTRY_OVERHEAD

Публичные методы класса

new(options = nil) Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 19
def initialize(options = nil)
  options ||= {}
  super(options)
  @data = {}
  @key_access = {}
  @max_size = options[:size] || 32.megabytes
  @max_prune_time = options[:max_prune_time] || 2
  @cache_size = 0
  @monitor = Monitor.new
  @pruning = false
end
Вызывает метод родительского класса ActiveSupport::Cache::Store.new

Публичные методы экземпляра

cleanup(options = nil) Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 40
def cleanup(options = nil)
  options = merged_options(options)
  instrument(:cleanup, :size => @data.size) do
    keys = synchronize{ @data.keys }
    keys.each do |key|
      entry = @data[key]
      delete_entry(key, options) if entry && entry.expired?
    end
  end
end

Проактивно итерируется по всем сохранённым ключам и удаляет истекшие.

clear(options = nil) Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 31
def clear(options = nil)
  synchronize do
    @data.clear
    @key_access.clear
    @cache_size = 0
  end
end
decrement(name, amount = 1, options = nil) Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 91
def decrement(name, amount = 1, options = nil)
  synchronize do
    options = merged_options(options)
    if num = read(name, options)
      num = num.to_i - amount
      write(name, num, options)
      num
    else
      nil
    end
  end
end

Уменьшает целочисленное значение в кэше.

delete_matched(matcher, options = nil) Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 104
def delete_matched(matcher, options = nil)
  options = merged_options(options)
  instrument(:delete_matched, matcher.inspect) do
    matcher = key_matcher(matcher, options)
    keys = synchronize { @data.keys }
    keys.each do |key|
      delete_entry(key, options) if key.match(matcher)
    end
  end
end
increment(name, amount = 1, options = nil) Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 77
def increment(name, amount = 1, options = nil)
  synchronize do
    options = merged_options(options)
    if num = read(name, options)
      num = num.to_i + amount
      write(name, num, options)
      num
    else
      nil
    end
  end
end

Увеличивает целочисленное значение в кэше.

prune(target_size, max_time = nil) Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 53
def prune(target_size, max_time = nil)
  return if pruning?
  @pruning = true
  begin
    start_time = Time.now
    cleanup
    instrument(:prune, target_size, :from => @cache_size) do
      keys = synchronize{ @key_access.keys.sort{|a,b| @key_access[a].to_f <=> @key_access[b].to_f} }
      keys.each do |key|
        delete_entry(key, options)
        return if @cache_size <= target_size || (max_time && Time.now - start_time > max_time)
      end
    end
  ensure
    @pruning = false
  end
end

Для обеспечения соответствия записей заданному размеру, кэш очищается путём удаления наименее недавно использованных записей.

pruning?() Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 72
def pruning?
  @pruning
end

Возвращает true, если кэш в настоящее время очищается.

Защищённые методы экземпляра

cached_size(key, entry) Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 129
def cached_size(key, entry)
  key.to_s.bytesize + entry.size + PER_ENTRY_OVERHEAD
end

© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API