Class: Moneta::Adapters::MemcachedDalli
- Inherits:
-
Object
- Object
- Moneta::Adapters::MemcachedDalli
- Includes:
- Defaults, ExpiresSupport
- Defined in:
- lib/moneta/adapters/memcached/dalli.rb
Overview
Memcached backend (using gem dalli)
Instance Attribute Summary
Attributes included from ExpiresSupport
Instance Method Summary collapse
-
#clear(options = {}) ⇒ void
Clear all keys in this store.
-
#close ⇒ Object
Explicitly close the store.
-
#delete(key, options = {}) ⇒ Object
Delete the key from the store and return the current value.
-
#increment(key, amount = 1, options = {}) ⇒ Object
Atomically increment integer value with key.
-
#initialize(options = {}) ⇒ MemcachedDalli
constructor
A new instance of MemcachedDalli.
-
#load(key, options = {}) ⇒ Object
Fetch value with key.
-
#store(key, value, options = {}) ⇒ Object
Store value with key.
Methods included from Defaults
#[], #[]=, #decrement, #fetch, #key?
Methods included from OptionSupport
#expires, #prefix, #raw, #with
Constructor Details
#initialize(options = {}) ⇒ MemcachedDalli
Returns a new instance of MemcachedDalli.
15 16 17 18 19 |
# File 'lib/moneta/adapters/memcached/dalli.rb', line 15 def initialize( = {}) self.default_expires = .delete(:expires) server = .delete(:server) || '127.0.0.1:11211' @cache = ::Dalli::Client.new(server, ) end |
Instance Method Details
#clear(options = {}) ⇒ void
This method returns an undefined value.
Clear all keys in this store
63 64 65 66 |
# File 'lib/moneta/adapters/memcached/dalli.rb', line 63 def clear( = {}) @cache.flush_all self end |
#close ⇒ Object
Explicitly close the store
69 70 71 72 |
# File 'lib/moneta/adapters/memcached/dalli.rb', line 69 def close @cache.close nil end |
#delete(key, options = {}) ⇒ Object
Delete the key from the store and return the current value
38 39 40 41 42 |
# File 'lib/moneta/adapters/memcached/dalli.rb', line 38 def delete(key, = {}) value = @cache.get(key) @cache.delete(key) value end |
#increment(key, amount = 1, options = {}) ⇒ Object
Not every Moneta store implements this method, a NotImplementedError is raised if it is not supported.
Atomically increment integer value with key
This method also accepts negative amounts.
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/moneta/adapters/memcached/dalli.rb', line 45 def increment(key, amount = 1, = {}) # FIXME: There is a Dalli bug, load(key) returns a wrong value after increment # therefore we set default = nil and create the counter manually # See https://github.com/mperham/dalli/issues/309 result = if amount >= 0 @cache.incr(key, amount, expires_value() || nil, nil) else @cache.decr(key, -amount, expires_value() || nil, nil) end if result result else store(key, amount, ) amount end end |
#load(key, options = {}) ⇒ Object
Fetch value with key. Return nil if the key doesn’t exist
22 23 24 25 26 27 28 29 |
# File 'lib/moneta/adapters/memcached/dalli.rb', line 22 def load(key, = {}) value = @cache.get(key) if value expires = expires_value(, nil) @cache.set(key, value, expires || nil, :raw => true) if expires != nil value end end |
#store(key, value, options = {}) ⇒ Object
Store value with key
32 33 34 35 |
# File 'lib/moneta/adapters/memcached/dalli.rb', line 32 def store(key, value, = {}) @cache.set(key, value, expires_value() || nil, :raw => true) value end |