Spec-Zone.ru › Ruby on Rails 4.1

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

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

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

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

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

Константы

PER_ENTRY_OVERHEAD

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

new(options = nil) Показать исходный код
Вызывает метод родительского класса ActiveSupport::Cache::Store.new
# 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

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

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 91
def decrement(name, amount = 1, options = nil)
  synchronize do
    options = merged_options(options)
    if num = read(name, options)
      num = num.to_i - amount
      write(name, num, options)
      num
    else
      nil
    end
  end
end
delete_matched(matcher, options = nil) Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 104
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)
  synchronize do
    options = merged_options(options)
    if num = read(name, options)
      num = num.to_i + amount
      write(name, num, options)
      num
    else
      nil
    end
  end
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?() Показать исходный код

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

# File activesupport/lib/active_support/cache/memory_store.rb, line 72
def pruning?
  @pruning
end

Защищенные методы экземпляра

cached_size(key, entry) Показать исходный код
# File activesupport/lib/active_support/cache/memory_store.rb, line 129
def cached_size(key, entry)
  key.to_s.bytesize + entry.size + PER_ENTRY_OVERHEAD
end

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

Spec-Zone.ru

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