Class: ActiveSupport::Cache::DalliStore
- Inherits:
-
Object
- Object
- ActiveSupport::Cache::DalliStore
- Defined in:
- lib/active_support/cache/dalli_store.rb
Constant Summary collapse
- ESCAPE_KEY_CHARS =
/[\x00-\x20%\x7F-\xFF]/
Instance Attribute Summary collapse
-
#options ⇒ Object
readonly
Returns the value of attribute options.
-
#silence ⇒ Object
(also: #silence?)
readonly
Returns the value of attribute silence.
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.
- #delete(name, options = nil) ⇒ Object
- #exist?(name, options = nil) ⇒ Boolean
- #fetch(name, options = nil) ⇒ Object
-
#increment(name, amount = 1, options = nil) ⇒ Object
Increment a cached value.
-
#initialize(*addresses) ⇒ DalliStore
constructor
Creates a new DalliStore object, with the given memcached server addresses.
-
#mute ⇒ Object
Silence the logger within a block.
- #read(name, options = nil) ⇒ Object
-
#read_multi(*names) ⇒ Object
Reads multiple keys from the cache using a single call to the servers for all keys.
- #reset ⇒ Object
-
#silence! ⇒ Object
Silence the logger.
-
#stats ⇒ Object
Get the statistics from the memcached servers.
- #write(name, value, options = nil) ⇒ Object
Constructor Details
#initialize(*addresses) ⇒ DalliStore
Creates a new DalliStore 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::DalliStore.new("localhost", "server-downstairs.localnetwork:8229")
If no addresses are specified, then DalliStore will connect to localhost port 11211 (the default memcached port).
37 38 39 40 41 42 43 44 45 |
# File 'lib/active_support/cache/dalli_store.rb', line 37 def initialize(*addresses) addresses = addresses.flatten = addresses. @options = .dup @options[:compress] ||= @options[:compression] @raise_errors = !!@options[:raise_errors] addresses << 'localhost:11211' if addresses.empty? @data = Dalli::Client.new(addresses, @options) end |
Instance Attribute Details
#options ⇒ Object (readonly)
Returns the value of attribute options.
9 10 11 |
# File 'lib/active_support/cache/dalli_store.rb', line 9 def @options end |
#silence ⇒ Object (readonly) Also known as: silence?
Returns the value of attribute silence.
9 10 11 |
# File 'lib/active_support/cache/dalli_store.rb', line 9 def silence @silence end |
Instance Method Details
#clear(options = nil) ⇒ Object
Clear the entire cache on all memcached servers. This method should be used with care when using a shared cache.
153 154 155 |
# File 'lib/active_support/cache/dalli_store.rb', line 153 def clear(=nil) @data.flush_all 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 fail. :initial defaults to zero, as if the counter was initially zero. memcached counters cannot hold negative values.
138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/active_support/cache/dalli_store.rb', line 138 def decrement(name, amount = 1, =nil) ||= {} initial = .has_key?(:initial) ? [:initial] : 0 expires_in = [:expires_in] instrument(:decrement, name, :amount => amount) do @data.decr(name, amount, expires_in, initial) end rescue Dalli::DalliError => e logger.error("DalliError: #{e.}") if logger raise if @raise_errors nil end |
#delete(name, options = nil) ⇒ Object
93 94 95 |
# File 'lib/active_support/cache/dalli_store.rb', line 93 def delete(name, =nil) delete_entry(name, ) end |
#exist?(name, options = nil) ⇒ Boolean
88 89 90 91 |
# File 'lib/active_support/cache/dalli_store.rb', line 88 def exist?(name, =nil) ||= {} !read_entry(name, ).nil? end |
#fetch(name, options = nil) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/active_support/cache/dalli_store.rb', line 47 def fetch(name, =nil) ||= {} if block_given? unless [:force] entry = instrument(:read, name, ) do |payload| payload[:super_operation] = :fetch if payload read_entry(name, ) end end if !entry.nil? instrument(:fetch_hit, name, ) { |payload| } entry else result = instrument(:generate, name, ) do |payload| yield end write(name, result, ) result end else read(name, ) end 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 fail. :initial defaults to the amount passed in, as if the counter was initially zero. memcached counters cannot hold negative values.
120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/active_support/cache/dalli_store.rb', line 120 def increment(name, amount = 1, =nil) ||= {} initial = .has_key?(:initial) ? [:initial] : amount expires_in = [:expires_in] instrument(:increment, name, :amount => amount) do @data.incr(name, amount, expires_in, initial) end rescue Dalli::DalliError => e logger.error("DalliError: #{e.}") if logger raise if @raise_errors nil end |
#mute ⇒ Object
Silence the logger within a block.
19 20 21 22 23 24 |
# File 'lib/active_support/cache/dalli_store.rb', line 19 def mute previous_silence, @silence = defined?(@silence) && @silence, true yield ensure @silence = previous_silence end |
#read(name, options = nil) ⇒ Object
72 73 74 75 76 77 78 79 |
# File 'lib/active_support/cache/dalli_store.rb', line 72 def read(name, =nil) ||= {} instrument(:read, name, ) do |payload| entry = read_entry(name, ) payload[:hit] = !!entry if payload entry end end |
#read_multi(*names) ⇒ Object
Reads multiple keys from the cache using a single call to the servers for all keys. Keys must be Strings.
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/active_support/cache/dalli_store.rb', line 99 def read_multi(*names) names. names = names.flatten mapping = names.inject({}) { |memo, name| memo[escape(name)] = name; memo } instrument(:read_multi, names) do results = @data.get_multi(mapping.keys) results.inject({}) do |memo, (inner, value)| entry = results[inner] # NB Backwards data compatibility, to be removed at some point memo[mapping[inner]] = (entry.is_a?(ActiveSupport::Cache::Entry) ? entry.value : entry) memo end end end |
#reset ⇒ Object
162 163 164 |
# File 'lib/active_support/cache/dalli_store.rb', line 162 def reset @data.reset end |
#silence! ⇒ Object
Silence the logger.
13 14 15 16 |
# File 'lib/active_support/cache/dalli_store.rb', line 13 def silence! @silence = true self end |
#stats ⇒ Object
Get the statistics from the memcached servers.
158 159 160 |
# File 'lib/active_support/cache/dalli_store.rb', line 158 def stats @data.stats end |
#write(name, value, options = nil) ⇒ Object
81 82 83 84 85 86 |
# File 'lib/active_support/cache/dalli_store.rb', line 81 def write(name, value, =nil) ||= {} instrument(:write, name, ) do |payload| write_entry(name, value, ) end end |