Spec-Zone.ru › Ruby on Rails 5.0

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

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

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

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

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

Константы

PER_ENTRY_OVERHEAD

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

new(options = nil) Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 19
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 40
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 31
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 82
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 86
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 77
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 53
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 72
def pruning?
  @pruning
end

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

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

Spec-Zone.ru

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