ActiveSupport::Cache::MemCacheStore (original) (raw)

Memcached Cache Store

A cache store implementation which stores data in Memcached: memcached.org

This is currently the most popular cache store for production websites.

Special features:

MemCacheStore implements the Strategy::LocalCache strategy which implements an in-memory cache inside of a block.

Methods

C

D

I

N

S

W

Constants

ESCAPE_KEY_CHARS = /[\x00-\x20%\x7F-\xFF]/n
KEY_MAX_SIZE = 250
OVERRIDDEN_OPTIONS = UNIVERSAL_OPTIONS
These options represent behavior overridden by this implementation and should not be allowed to get down to the Dalli client

Class Public methods

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 provided, but ENV['MEMCACHE_SERVERS'] is defined, it will be used instead. Otherwise, MemCacheStore will connect to localhost:11211 (the default memcached port).

Source: show | on GitHub

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

@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

Advertise cache versioning support.

Source: show | on GitHub

def self.supports_cache_versioning? true end

Instance Public methods

Clear the entire cache on all memcached servers. This method should be used with care when shared cache is being used.

Source: show | on GitHub

def clear(options = nil) rescue_error_with(nil) { @data.with { |c| c.flush_all } } end

Decrement a cached integer value using the memcached decr atomic operator. Returns the updated value.

If the key is unset or has expired, it will be set to 0. Memcached does not support negative counters.

cache.decrement("foo") # => 0

To set a specific value, call write passing raw: true:

cache.write("baz", 5, raw: true)
cache.decrement("baz") # => 4

Decrementing a non-numeric value, or a value written without raw: true, will fail and return nil.

Source: show | on GitHub

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

Increment a cached integer value using the memcached incr atomic operator. Returns the updated value.

If the key is unset or has expired, it will be set to amount:

cache.increment("foo") # => 1
cache.increment("bar", 100) # => 100

To set a specific value, call write passing raw: true:

cache.write("baz", 5, raw: true)
cache.increment("baz") # => 6

Incrementing a non-numeric value, or a value written without raw: true, will fail and return nil.

Source: show | on GitHub

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

Source: show | on GitHub

def inspect instance = @data || @mem_cache_options "#<#{self.class} options=#{options.inspect} mem_cache=#{instance.inspect}>" end

Get the statistics from the memcached servers.

Source: show | on GitHub

def stats @data.with { |c| c.stats } end

Behaves the same as ActiveSupport::Cache::Store#write, but supports additional options specific to memcached.

Additional Options