Spec-Zone.ru › Ruby on Rails 5.2

класс 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 21
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 43
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 34
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 85
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 90
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 80
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 56
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 75
def pruning?
  @pruning
end

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

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

Spec-Zone.ru

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