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.
- B
- C
- N
- R
- S
ESCAPE_KEY_CHARS | = | /[\x00-\x20%\x7F-\xFF]/n |
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"))
# File activesupport/lib/active_support/cache/mem_cache_store.rb, line 56 def initialize(*addresses) addresses = addresses.flatten options = addresses.extract_options! super(options) if addresses.first.respond_to?(:get) @data = addresses.first else mem_cache_options = options.dup UNIVERSAL_OPTIONS.each{|name| mem_cache_options.delete(name)} @data = self.class.build_mem_cache(*(addresses + [mem_cache_options])) end extend Strategy::LocalCache extend LocalCacheWithRaw end
Clear the entire cache on all memcached servers. This method should be used with care when shared cache is being used.
Reads multiple values from the cache using a single call to the servers for all keys. Options can be passed in the last argument.
# File activesupport/lib/active_support/cache/mem_cache_store.rb, line 75 def read_multi(*names) options = names.extract_options! options = merged_options(options) keys_to_names = Hash[names.map{|name| [escape_key(namespaced_key(name, options)), 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