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 collapse
- #backend ⇒ Object readonly
Attributes included from ExpiresSupport
Instance Method Summary collapse
-
#clear(options = {}) ⇒ void
Clear all keys in this store.
-
#close ⇒ Object
Explicitly close the store.
-
#create(key, value, options = {}) ⇒ Boolean
Atomically sets a key to value if it’s not set.
-
#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, #features, #fetch, included, #key?, #supports?
Methods included from OptionSupport
#expires, #prefix, #raw, #with
Constructor Details
#initialize(options = {}) ⇒ MemcachedDalli
Returns a new instance of MemcachedDalli.
19 20 21 22 23 24 25 26 |
# File 'lib/moneta/adapters/memcached/dalli.rb', line 19 def initialize( = {}) self.default_expires = .delete(:expires) @backend = [:backend] || begin server = .delete(:server) || '127.0.0.1:11211' ::Dalli::Client.new(server, ) end end |
Instance Attribute Details
#backend ⇒ Object (readonly)
12 13 14 |
# File 'lib/moneta/adapters/memcached/dalli.rb', line 12 def backend @backend end |
Instance Method Details
#clear(options = {}) ⇒ void
This method returns an undefined value.
Clear all keys in this store
72 73 74 75 |
# File 'lib/moneta/adapters/memcached/dalli.rb', line 72 def clear( = {}) @backend.flush_all self end |
#close ⇒ Object
Explicitly close the store
83 84 85 86 |
# File 'lib/moneta/adapters/memcached/dalli.rb', line 83 def close @backend.close nil end |
#create(key, value, options = {}) ⇒ Boolean
Not every Moneta store implements this method, a NotImplementedError is raised if it is not supported.
Atomically sets a key to value if it’s not set.
78 79 80 |
# File 'lib/moneta/adapters/memcached/dalli.rb', line 78 def create(key, value, = {}) @backend.add(key, value, expires_value() || nil, raw: true) end |
#delete(key, options = {}) ⇒ Object
Delete the key from the store and return the current value
45 46 47 48 49 |
# File 'lib/moneta/adapters/memcached/dalli.rb', line 45 def delete(key, = {}) value = @backend.get(key) @backend.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.
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/moneta/adapters/memcached/dalli.rb', line 52 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 @backend.incr(key, amount, expires_value() || nil, nil) else @backend.decr(key, -amount, expires_value() || nil, nil) end if result result elsif create(key, amount.to_s, ) amount else increment(key, amount, ) end end |
#load(key, options = {}) ⇒ Object
Fetch value with key. Return nil if the key doesn’t exist
29 30 31 32 33 34 35 36 |
# File 'lib/moneta/adapters/memcached/dalli.rb', line 29 def load(key, = {}) value = @backend.get(key) if value expires = expires_value(, nil) @backend.set(key, value, expires || nil, raw: true) if expires != nil value end end |
#store(key, value, options = {}) ⇒ Object
Store value with key
39 40 41 42 |
# File 'lib/moneta/adapters/memcached/dalli.rb', line 39 def store(key, value, = {}) @backend.set(key, value, expires_value() || nil, raw: true) value end |