Spec-Zone.ru › Ruby on Rails 7.1

class ActiveSupport::Cache::MemCacheStore

Parent:
ActiveSupport::Cache::Store

Магазин кэша Memcached

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

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

Особенности:

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

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

Константы

ESCAPE_KEY_CHARS
KEY_MAX_SIZE
OVERRIDDEN_OPTIONS

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

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

new(*addresses) Показать исходный код
# File activesupport/lib/active_support/cache/mem_cache_store.rb, line 118
      def initialize(*addresses)
        addresses = addresses.flatten
        options = addresses.extract_options!
        if options.key?(:cache_nils)
          options[:skip_nil] = !options.delete(:cache_nils)
        end
        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
        if addresses.first.is_a?(Dalli::Client)
          ActiveSupport.deprecator.warn(<<~MSG)
            Initializing MemCacheStore with a Dalli::Client is deprecated and will be removed in Rails 7.2.
            Use memcached server addresses instead.
          MSG
          @data = addresses.first
        else
          @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
      end

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

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

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

Вызов метода родительского класса 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 215
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 204
def decrement(name, amount = 1, options = nil)
  options = merged_options(options)
  instrument(:decrement, name, amount: amount) do
    rescue_error_with nil do
      @data.with { |c| c.decr(normalize_key(name, options), amount, options[:expires_in], 0) }
    end
  end
end

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

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

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

Чтобы установить определённое значение, вызовите write, передавая raw: true:

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

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

increment(name, amount = 1, options = nil) Показать исходный код
# File activesupport/lib/active_support/cache/mem_cache_store.rb, line 180
def increment(name, amount = 1, options = nil)
  options = merged_options(options)
  instrument(:increment, name, amount: amount) do
    rescue_error_with nil do
      @data.with { |c| c.incr(normalize_key(name, options), amount, options[:expires_in], amount) }
    end
  end
end

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

Если ключ не задан или истек срок действия, ему будет присвоено значение 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.

inspect() Показать исходный код
# File activesupport/lib/active_support/cache/mem_cache_store.rb, line 144
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 220
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 150
      

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

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

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

  • unless_exist: true — предотвращает перезапись существующей записи в кэше.

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

Spec-Zone.ru

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