Spec-Zone.ru › Ruby on Rails 8.1

класс 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 75
def initialize(options = nil)
  options ||= {}
  options[:coder] = DupCoder unless options.key?(:coder) || options.key?(:serializer)
  # 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 90
def self.supports_cache_versioning?
  true
end

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

Общедоступные методы экземпляра

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

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

decrement (name, amount = 1, **options) Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 168
def decrement(name, amount = 1, **options)
  instrument(:decrement, name, amount: amount) do
    modify_value(name, -amount, **options)
  end
end

Уменьшает кэшированное целочисленное значение. Возвращает обновлённое значение.

Если ключ не задан или срок его действия истёк, ему будет присвоено значение -amount.

cache.decrement("foo") # => -1

Чтобы задать конкретное значение, вызовите write:

cache.write("baz", 5)
cache.decrement("baz") # => 4
delete_matched (matcher, options = nil) Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 175
def delete_matched(matcher, options = nil)
  options = merged_options(options)
  matcher = key_matcher(matcher, options)

  instrument(:delete_matched, matcher.inspect) do
    keys = synchronize { @data.keys }
    keys.each do |key|
      delete_entry(key, **options) if key.match(matcher)
    end
  end
end

Удаляет записи кэша, если ключ кэша соответствует заданному шаблону.

increment (name, amount = 1, **options) Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 151
def increment(name, amount = 1, **options)
  instrument(:increment, name, amount: amount) do
    modify_value(name, amount, **options)
  end
end

Увеличивает кэшированное целочисленное значение. Возвращает обновлённое значение.

Если ключ не задан, ему будет присвоено значение amount:

cache.increment("foo") # => 1
cache.increment("bar", 100) # => 100

Чтобы задать конкретное значение, вызовите write:

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

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

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

Spec-Zone.ru

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