Class: Moneta::Adapters::MemcachedNative
- Inherits:
-
Moneta::Adapter
- Object
- Moneta::Adapter
- Moneta::Adapters::MemcachedNative
- Includes:
- ExpiresSupport
- Defined in:
- lib/moneta/adapters/memcached/native.rb
Overview
Memcached backend (using gem memcached)
Instance Attribute Summary
Attributes inherited from Moneta::Adapter
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 = {}) ⇒ Object constructor
-
#load(key, options = {}) ⇒ Object
Fetch value with key.
-
#store(key, value, options = {}) ⇒ Object
Store value with key.
Methods included from ExpiresSupport
Methods inherited from Moneta::Adapter
backend, backend_block, backend_required?
Methods included from Config
Methods included from Defaults
#[], #[]=, #decrement, #each_key, #features, #fetch, #fetch_values, included, #key?, #merge!, #slice, #supports?, #update, #values_at
Methods included from OptionSupport
#expires, #prefix, #raw, #with
Constructor Details
#initialize(options = {}) ⇒ Object
19 20 21 22 23 24 25 |
# File 'lib/moneta/adapters/memcached/native.rb', line 19 backend do |server: '127.0.0.1:11211', namespace: nil, **| [:prefix_key] = namespace if namespace # We don't want a limitation on the key charset. Therefore we use the binary protocol. # It is also faster. [:binary_protocol] = true unless .include?(:binary_protocol) ::Memcached.new(server, ) end |
Instance Method Details
#clear(options = {}) ⇒ void
This method returns an undefined value.
Clear all keys in this store
87 88 89 90 |
# File 'lib/moneta/adapters/memcached/native.rb', line 87 def clear( = {}) @backend.flush self end |
#close ⇒ Object
Explicitly close the store
93 94 95 96 |
# File 'lib/moneta/adapters/memcached/native.rb', line 93 def close @backend.reset 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.
77 78 79 80 81 82 83 84 |
# File 'lib/moneta/adapters/memcached/native.rb', line 77 def create(key, value, = {}) expires = expires_value() Numeric === expires and expires = expires.to_i @backend.add(key, value, expires || 0, false) true rescue ::Memcached::ConnectionDataExists false end |
#delete(key, options = {}) ⇒ Object
Delete the key from the store and return the current value
52 53 54 55 56 57 58 |
# File 'lib/moneta/adapters/memcached/native.rb', line 52 def delete(key, = {}) value = @backend.get(key, false) @backend.delete(key) value rescue ::Memcached::NotFound nil 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.
61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/moneta/adapters/memcached/native.rb', line 61 def increment(key, amount = 1, = {}) result = if amount >= 0 @backend.increment(key, amount) else @backend.decrement(key, -amount) end # HACK: Throw error if applied to invalid value # see https://github.com/evan/memcached/issues/110 Integer((@backend.get(key, false) rescue 0)) if result == 0 result rescue ::Memcached::NotFound retry unless create(key, amount.to_s, ) amount end |
#load(key, options = {}) ⇒ Object
Fetch value with key. Return nil if the key doesn’t exist
28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/moneta/adapters/memcached/native.rb', line 28 def load(key, = {}) value = @backend.get(key, false) if value expires = expires_value(, nil) unless expires == nil Numeric === expires and expires = expires.to_i @backend.set(key, value, expires || 0, false) end value end rescue ::Memcached::NotFound nil end |
#store(key, value, options = {}) ⇒ Object
Store value with key
43 44 45 46 47 48 49 |
# File 'lib/moneta/adapters/memcached/native.rb', line 43 def store(key, value, = {}) # TTL must be Integer expires = expires_value() Numeric === expires and expires = expires.to_i @backend.set(key, value, expires || 0, false) value end |