Spec-Zone.ru › Ruby on Rails 8.1

class ActiveSupport::Cache::MemCacheStore

Родительский класс:
ActiveSupport::Cache::Store

Хранилище кэша Memcached

Реализация хранилища кэша, в котором данные хранятся в Memcached: memcached.org

В настоящее время это самое популярное хранилище кэша для рабочих веб-сайтов.

Особые возможности:

  • Кластеризация и балансировка нагрузки. Можно указать несколько серверов memcached, и MemCacheStore будет распределять нагрузку между всеми доступными серверами. Если сервер выйдет из строя, MemCacheStore будет игнорировать его, пока он снова не станет доступен.

MemCacheStore реализует стратегию Strategy::LocalCache, которая создает кэш в памяти внутри блока.

Константы

ESCAPE_KEY_CHARS
OVERRIDDEN_OPTIONS

Эти параметры определяют поведение, переопределенное данной реализацией, и не должны передаваться клиенту Dalli

Открытые методы класса

new (*addresses) Показать исходный код
# File activesupport/lib/active_support/cache/mem_cache_store.rb, line 76
def initialize(*addresses)
  addresses = addresses.flatten
  options = addresses.extract_options!
  if options.key?(:cache_nils)
    options[:skip_nil] = !options.delete(:cache_nils)
  end
  options[:max_key_size] ||= MAX_KEY_SIZE
  super(options)

  unless [String, Dalli::Client, NilClass].include?(addresses.first.class)
    raise ArgumentError, "First argument must be an empty array, address, or array of addresses."
  end

  @mem_cache_options = options.dup
  # The value "compress: false" prevents duplicate compression within Dalli.
  @mem_cache_options[:compress] = false
  (OVERRIDDEN_OPTIONS - %i(compress)).each { |name| @mem_cache_options.delete(name) }
  @data = self.class.build_mem_cache(*(addresses + [@mem_cache_options]))
end

Создает объект MemCacheStore с указанными адресами серверов memcached. Каждый адрес — это либо имя хоста, либо строка с именем хоста и портом в формате «host_name:port». Например:

ActiveSupport::Cache::MemCacheStore.new("localhost", "server-downstairs.localnetwork:8229")

Если адреса не указаны, но определена переменная ENV['MEMCACHE_SERVERS'], будет использоваться она. В противном случае MemCacheStore подключится к localhost:11211 (порту memcached по умолчанию).

Вызывает метод суперкласса ActiveSupport::Cache::Store::new
supports_cache_versioning? () Показать исходный код
# File activesupport/lib/active_support/cache/mem_cache_store.rb, line 38
def self.supports_cache_versioning?
  true
end

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

Открытые методы экземпляра

clear (options = nil) Показать исходный код
# File activesupport/lib/active_support/cache/mem_cache_store.rb, line 178
def clear(options = nil)
  rescue_error_with(nil) { @data.with { |c| c.flush_all } }
end

Очищает весь кэш на всех серверах memcached. Этот метод следует использовать с осторожностью при работе с общим кэшем.

decrement (name, amount = 1, options = nil) Показать исходный код
# File activesupport/lib/active_support/cache/mem_cache_store.rb, line 165
def decrement(name, amount = 1, options = nil)
  options = merged_options(options)
  key = normalize_key(name, options)

  instrument(:decrement, key, amount: amount) do
    rescue_error_with nil do
      @data.with { |c| c.decr(key, amount, options[:expires_in], 0) }
    end
  end
end

Уменьшает целочисленное значение в кэше с помощью атомарного оператора decr в memcached. Возвращает обновленное значение.

Если ключ не задан или срок его действия истек, ему будет присвоено значение 0. Memcached не поддерживает отрицательные счетчики.

cache.decrement("foo") # => 0

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

cache.write("baz", 5, raw: true)
cache.decrement("baz") # => 4

Уменьшение нечислового значения или значения, записанного без raw: true, завершится ошибкой и вернет nil.

Чтобы прочитать значение позже, вызовите read_counter:

cache.decrement("baz") # => 3
cache.read_counter("baz") # 3
increment (name, amount = 1, options = nil) Показать исходный код
# File activesupport/lib/active_support/cache/mem_cache_store.rb, line 134
def increment(name, amount = 1, options = nil)
  options = merged_options(options)
  key = normalize_key(name, options)

  instrument(:increment, key, amount: amount) do
    rescue_error_with nil do
      @data.with { |c| c.incr(key, amount, options[:expires_in], amount) }
    end
  end
end

Увеличивает целочисленное значение в кэше с помощью атомарного оператора incr в memcached. Возвращает обновленное значение.

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

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

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

cache.write("baz", 5, raw: true)
cache.increment("baz") # => 6

Увеличение нечислового значения или значения, записанного без raw: true, завершится ошибкой и вернет nil.

Чтобы прочитать значение позже, вызовите read_counter:

cache.increment("baz") # => 7
cache.read_counter("baz") # 7
inspect () Показать исходный код
# File activesupport/lib/active_support/cache/mem_cache_store.rb, line 96
def inspect
  instance = @data || @mem_cache_options
  "#<#{self.class} options=#{options.inspect} mem_cache=#{instance.inspect}>"
end
stats () Показать исходный код
# File activesupport/lib/active_support/cache/mem_cache_store.rb, line 183
def stats
  @data.with { |c| c.stats }
end

Получает статистику с серверов memcached.

write(name, value, options = nil) Показать исходный код
# File activesupport/lib/active_support/cache/mem_cache_store.rb, line 102
      

Работает так же, как ActiveSupport::Cache::Store#write, но поддерживает дополнительные параметры, специфичные для memcached.

Дополнительные параметры

  • raw: true — отправляет значение на сервер напрямую в виде необработанных байтов. Значение должно быть строкой или числом. Операции memcached, такие как increment и decrement, можно использовать только для необработанных значений.

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

Spec-Zone.ru

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