Spec-Zone.ru › Ruby on Rails 6.0

класс 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
supports_cache_versioning?() Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 34
def self.supports_cache_versioning?
  true
end

Объявляет поддержку версиирования кэша.

Открытые методы экземпляра

cleanup(options = nil) Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 48
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 39
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 90
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 95
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 85
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 61
def prune(target_size, max_time = nil)
  return if pruning?
  @pruning = true
  begin
    start_time = Concurrent.monotonic_time
    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 && Concurrent.monotonic_time - start_time > max_time)
      end
    end
  ensure
    @pruning = false
  end
end

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

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

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

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

Spec-Zone.ru

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