Spec-Zone.ru › Ruby on Rails 5.1

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

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

Реализация кэша, которая хранит всё в памяти в рамках одного процесса. Если у вас несколько процессов Ruby on Rails (как, например, при использовании Phusion Passenger или в кластерном режиме puma), это означает, что экземпляры процессов 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 41
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 32
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 83
def decrement(name, amount = 1, options = nil)
  modify_value(name, -amount, options)
end

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

delete_matched(matcher, options = nil) Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 88
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 78
def increment(name, amount = 1, options = nil)
  modify_value(name, amount, options)
end

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

prune(target_size, max_time = nil) Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 54
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 73
def pruning?
  @pruning
end

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

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

Spec-Zone.ru

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