class ActiveSupport::Cache::MemCacheStore
Хранилище кэша Memcached
Реализация хранилища кэша, которое хранит данные в Memcached: memcached.org
В настоящее время это наиболее популярное хранилище кэша для веб-сайтов в производстве.
Особенности:
-
Кластеризация и балансировка нагрузки. Можно указать несколько серверов memcached, и
MemCacheStoreбудет балансировать нагрузку между всеми доступными серверами. Если сервер выйдет из строя,MemCacheStoreпроигнорирует его до момента его восстановления.
MemCacheStore реализует стратегию Strategy::LocalCache, которая реализует кэш в оперативной памяти внутри блока.
Константы
- ESCAPE_KEY_CHARS
- KEY_MAX_SIZE
- OVERRIDDEN_OPTIONS
-
Эти параметры представляют поведение, переопределённое этой реализацией, и не должны передаваться клиенту Dalli.
Публичные методы класса
# File activesupport/lib/active_support/cache/mem_cache_store.rb, line 77
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
@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. Каждый адрес — это имя хоста или строка хост:порт в формате “имя_хоста:порт”. Например:
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 171
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 158
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 Уменьшает значение кэшированного целочисленного значения с помощью атомарного оператора memcached decr. Возвращает обновлённое значение.
Если ключ не задан или истек срок действия, он устанавливается в 0. Memcached не поддерживает отрицательные счётчики.
cache.decrement("foo") # => 0
Для установки определённого значения, вызовите write с параметром raw: true.
cache.write("baz", 5, raw: true)
cache.decrement("baz") # => 4
Попытка уменьшить значение, которое не является числом, или значение, записанное без raw: true, приведёт к ошибке и возвращению nil.
# File activesupport/lib/active_support/cache/mem_cache_store.rb, line 132
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 Увеличивает значение кэшированного целочисленного значения с помощью атомарного оператора 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.
# 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 176
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, только для сырых значений. -
unless_exist: true— предотвращает перезапись существующей записи кэша.
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.