Class: ActiveSupport::Cache::MemCacheStore
- Defined in:
- activesupport/lib/active_support/cache/mem_cache_store.rb
Overview
A cache store implementation which stores data in Memcached: memcached.org/
This is currently the most popular cache store for production websites.
Special features:
-
Clustering and load balancing. One can specify multiple memcached servers, and MemCacheStore will load balance between all available servers. If a server goes down, then MemCacheStore will ignore it until it comes back up.
MemCacheStore implements the Strategy::LocalCache strategy which implements an in-memory cache inside of a block.
Defined Under Namespace
Modules: LocalCacheWithRaw
Constant Summary collapse
- ESCAPE_KEY_CHARS =
/[\x00-\x20%\x7F-\xFF]/n
Instance Attribute Summary
Attributes inherited from Store
Class Method Summary collapse
Instance Method Summary collapse
-
#clear(options = nil) ⇒ Object
Clear the entire cache on all memcached servers.
-
#decrement(name, amount = 1, options = nil) ⇒ Object
Decrement a cached value.
-
#increment(name, amount = 1, options = nil) ⇒ Object
Increment a cached value.
-
#initialize(*addresses) ⇒ MemCacheStore
constructor
Creates a new MemCacheStore object, with the given memcached server addresses.
-
#read_multi(*names) ⇒ Object
Reads multiple values from the cache using a single call to the servers for all keys.
-
#stats ⇒ Object
Get the statistics from the memcached servers.
Methods inherited from Store
#cleanup, #delete, #delete_matched, #exist?, #fetch, #fetch_multi, instrument, instrument=, #mute, #read, #silence!, #write
Constructor Details
#initialize(*addresses) ⇒ MemCacheStore
Creates a new MemCacheStore object, with the given memcached server addresses. Each address is either a host name, or a host-with-port string in the form of “host_name:port”. For example:
ActiveSupport::Cache::MemCacheStore.new("localhost", "server-downstairs.localnetwork:8229")
If no addresses are specified, then MemCacheStore will connect to localhost port 11211 (the default memcached port).
Instead of addresses one can pass in a MemCache-like object. For example:
require 'memcached' # gem install memcached; uses C bindings to libmemcached
ActiveSupport::Cache::MemCacheStore.new(Memcached::Rails.new("localhost:11211"))
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'activesupport/lib/active_support/cache/mem_cache_store.rb', line 49 def initialize(*addresses) addresses = addresses.flatten = addresses. super() if addresses.first.respond_to?(:get) @data = addresses.first else = .dup UNIVERSAL_OPTIONS.each{|name| .delete(name)} @data = self.class.build_mem_cache(*(addresses + [])) end extend Strategy::LocalCache extend LocalCacheWithRaw end |
Class Method Details
.build_mem_cache(*addresses) ⇒ Object
29 30 31 32 33 34 |
# File 'activesupport/lib/active_support/cache/mem_cache_store.rb', line 29 def self.build_mem_cache(*addresses) addresses = addresses.flatten = addresses. addresses = ["localhost:11211"] if addresses.empty? Dalli::Client.new(addresses, ) end |
Instance Method Details
#clear(options = nil) ⇒ Object
Clear the entire cache on all memcached servers. This method should be used with care when shared cache is being used.
111 112 113 114 115 116 |
# File 'activesupport/lib/active_support/cache/mem_cache_store.rb', line 111 def clear( = nil) @data.flush_all rescue Dalli::DalliError => e logger.error("DalliError (#{e}): #{e.}") if logger nil end |
#decrement(name, amount = 1, options = nil) ⇒ Object
Decrement a cached value. This method uses the memcached decr atomic operator and can only be used on values written with the :raw option. Calling it on a value not stored with :raw will initialize that value to zero.
99 100 101 102 103 104 105 106 107 |
# File 'activesupport/lib/active_support/cache/mem_cache_store.rb', line 99 def decrement(name, amount = 1, = nil) # :nodoc: = () instrument(:decrement, name, :amount => amount) do @data.decr(escape_key(namespaced_key(name, )), amount) end rescue Dalli::DalliError logger.error("DalliError (#{e}): #{e.}") if logger nil end |
#increment(name, amount = 1, options = nil) ⇒ Object
Increment a cached value. This method uses the memcached incr atomic operator and can only be used on values written with the :raw option. Calling it on a value not stored with :raw will initialize that value to zero.
85 86 87 88 89 90 91 92 93 |
# File 'activesupport/lib/active_support/cache/mem_cache_store.rb', line 85 def increment(name, amount = 1, = nil) # :nodoc: = () instrument(:increment, name, :amount => amount) do @data.incr(escape_key(namespaced_key(name, )), amount) end rescue Dalli::DalliError logger.error("DalliError (#{e}): #{e.}") if logger nil end |
#read_multi(*names) ⇒ Object
Reads multiple values from the cache using a single call to the servers for all keys. Options can be passed in the last argument.
68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'activesupport/lib/active_support/cache/mem_cache_store.rb', line 68 def read_multi(*names) = names. = () keys_to_names = Hash[names.map{|name| [escape_key(namespaced_key(name, )), name]}] raw_values = @data.get_multi(keys_to_names.keys, :raw => true) values = {} raw_values.each do |key, value| entry = deserialize_entry(value) values[keys_to_names[key]] = entry.value unless entry.expired? end values end |
#stats ⇒ Object
Get the statistics from the memcached servers.
119 120 121 |
# File 'activesupport/lib/active_support/cache/mem_cache_store.rb', line 119 def stats @data.stats end |