Spec-Zone.ru › Ruby on Rails 6.1

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

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

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

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

В отличие от других Cache реализаций кэша, MemoryStore по умолчанию не сжимает значения. MemoryStore не так сильно выигрывает от сжатия, как другие Store реализации, так как не отправляет данные по сети. Однако, если сжатие включено, оно по-прежнему несёт полную нагрузку по сжатию с точки зрения использования ЦП.

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

Константы

DEFAULT_CODER
PER_ENTRY_OVERHEAD

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

new(options = nil) Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 44
def initialize(options = nil)
  options ||= {}
  # Disable compression by default.
  options[:compress] ||= false
  super(options)
  @data = {}
  @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 58
def self.supports_cache_versioning?
  true
end

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

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

cleanup(options = nil) Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 71
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 63
def clear(options = nil)
  synchronize do
    @data.clear
    @cache_size = 0
  end
end

Удаляет все данные, хранящиеся в данном кэше.

decrement(name, amount = 1, options = nil) Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 113
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 118
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 108
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 84
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 { @data.keys }
      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 103
def pruning?
  @pruning
end

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

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

Spec-Zone.ru

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