Class: ActiveSupport::Cache::MemCacheStore
- Defined in:
- lib/active_support/cache/mem_cache_store.rb
Overview
A cache store implementation which stores data in Memcached: www.danga.com/memcached/
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 goes back online.
-
Time-based expiry support. See #write and the
:expires_in
option.
Direct Known Subclasses
Defined Under Namespace
Modules: Response
Instance Attribute Summary collapse
-
#addresses ⇒ Object
readonly
Returns the value of attribute addresses.
Instance Method Summary collapse
- #clear ⇒ Object
-
#decrement(key, amount = 1) ⇒ Object
:nodoc:.
-
#delete(key, options = nil) ⇒ Object
:nodoc:.
-
#delete_matched(matcher, options = nil) ⇒ Object
:nodoc:.
-
#exist?(key, options = nil) ⇒ Boolean
:nodoc:.
-
#increment(key, amount = 1) ⇒ Object
:nodoc:.
-
#initialize(*addresses) ⇒ MemCacheStore
constructor
Creates a new MemCacheStore object, with the given memcached server addresses.
-
#read(key, options = nil) ⇒ Object
:nodoc:.
- #stats ⇒ Object
-
#write(key, value, options = nil) ⇒ Object
Writes a value to the cache.
Methods inherited from Store
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).
35 36 37 38 39 40 41 |
# File 'lib/active_support/cache/mem_cache_store.rb', line 35 def initialize(*addresses) addresses = addresses.flatten = addresses. addresses = ["localhost"] if addresses.empty? @addresses = addresses @data = MemCache.new(addresses, ) end |
Instance Attribute Details
#addresses ⇒ Object (readonly)
Returns the value of attribute addresses.
25 26 27 |
# File 'lib/active_support/cache/mem_cache_store.rb', line 25 def addresses @addresses end |
Instance Method Details
#clear ⇒ Object
109 110 111 |
# File 'lib/active_support/cache/mem_cache_store.rb', line 109 def clear @data.flush_all end |
#decrement(key, amount = 1) ⇒ Object
:nodoc:
95 96 97 98 99 100 101 102 |
# File 'lib/active_support/cache/mem_cache_store.rb', line 95 def decrement(key, amount = 1) # :nodoc: log("decrement", key, amount) response = @data.decr(key, amount) response == Response::NOT_FOUND ? nil : response rescue MemCache::MemCacheError nil end |
#delete(key, options = nil) ⇒ Object
:nodoc:
71 72 73 74 75 76 77 78 |
# File 'lib/active_support/cache/mem_cache_store.rb', line 71 def delete(key, = nil) # :nodoc: super response = @data.delete(key, expires_in()) response == Response::DELETED rescue MemCache::MemCacheError => e logger.error("MemCacheError (#{e}): #{e.}") false end |
#delete_matched(matcher, options = nil) ⇒ Object
:nodoc:
104 105 106 107 |
# File 'lib/active_support/cache/mem_cache_store.rb', line 104 def delete_matched(matcher, = nil) # :nodoc: super raise "Not supported by Memcache" end |
#exist?(key, options = nil) ⇒ Boolean
:nodoc:
80 81 82 83 84 |
# File 'lib/active_support/cache/mem_cache_store.rb', line 80 def exist?(key, = nil) # :nodoc: # Doesn't call super, cause exist? in memcache is in fact a read # But who cares? Reading is very fast anyway !read(key, ).nil? end |
#increment(key, amount = 1) ⇒ Object
:nodoc:
86 87 88 89 90 91 92 93 |
# File 'lib/active_support/cache/mem_cache_store.rb', line 86 def increment(key, amount = 1) # :nodoc: log("incrementing", key, amount) response = @data.incr(key, amount) response == Response::NOT_FOUND ? nil : response rescue MemCache::MemCacheError nil end |
#read(key, options = nil) ⇒ Object
:nodoc:
43 44 45 46 47 48 49 |
# File 'lib/active_support/cache/mem_cache_store.rb', line 43 def read(key, = nil) # :nodoc: super @data.get(key, raw?()) rescue MemCache::MemCacheError => e logger.error("MemCacheError (#{e}): #{e.}") nil end |
#stats ⇒ Object
113 114 115 |
# File 'lib/active_support/cache/mem_cache_store.rb', line 113 def stats @data.stats end |
#write(key, value, options = nil) ⇒ Object
Writes a value to the cache.
Possible options:
-
:unless_exist
- set to true if you don’t want to update the cache if the key is already set. -
:expires_in
- the number of seconds that this value may stay in the cache. See ActiveSupport::Cache::Store#write for an example.
58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/active_support/cache/mem_cache_store.rb', line 58 def write(key, value, = nil) super method = && [:unless_exist] ? :add : :set # memcache-client will break the connection if you send it an integer # in raw mode, so we convert it to a string to be sure it continues working. value = value.to_s if raw?() response = @data.send(method, key, value, expires_in(), raw?()) response == Response::STORED rescue MemCache::MemCacheError => e logger.error("MemCacheError (#{e}): #{e.}") false end |