Spec-Zone.ru › Ruby on Rails 7.0

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

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

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

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

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

MemoryStore является потокобезопасным.

Константы

PER_ENTRY_OVERHEAD

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

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

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

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

cleanup(options = nil) Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 75
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 67
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 117
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 122
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 112
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 88
def prune(target_size, max_time = nil)
  return if pruning?
  @pruning = true
  begin
    start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
    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 && Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time > max_time)
      end
    end
  ensure
    @pruning = false
  end
end

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

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

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

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

Spec-Zone.ru

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