class ActiveSupport::Cache::MemCacheStore
Хранилище кэша Memcached
Реализация хранилища кэша, в котором данные хранятся в Memcached: memcached.org
В настоящее время это самое популярное хранилище кэша для рабочих веб-сайтов.
Особые возможности:
-
Кластеризация и балансировка нагрузки. Можно указать несколько серверов memcached, и
MemCacheStoreбудет распределять нагрузку между всеми доступными серверами. Если сервер выйдет из строя,MemCacheStoreбудет игнорировать его, пока он снова не станет доступен.
MemCacheStore реализует стратегию Strategy::LocalCache, которая создает кэш в памяти внутри блока.
Константы
- ESCAPE_KEY_CHARS
- OVERRIDDEN_OPTIONS
-
Эти параметры определяют поведение, переопределенное данной реализацией, и не должны передаваться клиенту Dalli
Открытые методы класса
# 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 # File activesupport/lib/active_support/cache/mem_cache_store.rb, line 38 def self.supports_cache_versioning? true end
Объявляет о поддержке версионирования кэша.
Открытые методы экземпляра
# 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. Этот метод следует использовать с осторожностью при работе с общим кэшем.
# 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
# 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
# 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 # File activesupport/lib/active_support/cache/mem_cache_store.rb, line 183
def stats
@data.with { |c| c.stats }
end Получает статистику с серверов memcached.
# 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.