Class: Moneta::Adapters::LMDB
- Inherits:
-
Object
- Object
- Moneta::Adapters::LMDB
- Includes:
- Defaults
- Defined in:
- lib/moneta/adapters/lmdb.rb
Overview
LMDB backend
Constant Summary collapse
- PUT_FLAGS =
[:nooverwrite, :nodupdata, :current, :append, :appenddup]
Instance Attribute Summary collapse
- #backend ⇒ Object readonly
- #db ⇒ Object readonly
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) ⇒ LMDB
constructor
A new instance of LMDB.
-
#key?(key, options = {}) ⇒ Boolean
Exists the value with key.
-
#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, #supports?
Methods included from OptionSupport
#expires, #prefix, #raw, #with
Constructor Details
#initialize(options) ⇒ LMDB
Returns a new instance of LMDB.
20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/moneta/adapters/lmdb.rb', line 20 def initialize() db = .delete(:db) @backend = .delete(:backend) || begin raise ArgumentError, 'Option :dir is required' unless dir = .delete(:dir) FileUtils.mkpath(dir) ::LMDB.new(dir, ) end @db = @backend.database(db, create: true) end |
Instance Attribute Details
#backend ⇒ Object (readonly)
12 13 14 |
# File 'lib/moneta/adapters/lmdb.rb', line 12 def backend @backend end |
#db ⇒ Object (readonly)
12 13 14 |
# File 'lib/moneta/adapters/lmdb.rb', line 12 def db @db end |
Instance Method Details
#clear(options = {}) ⇒ void
This method returns an undefined value.
Clear all keys in this store
59 60 61 62 |
# File 'lib/moneta/adapters/lmdb.rb', line 59 def clear( = {}) @db.clear self end |
#close ⇒ Object
Explicitly close the store
87 88 89 90 |
# File 'lib/moneta/adapters/lmdb.rb', line 87 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.
75 76 77 78 79 80 81 82 83 84 |
# File 'lib/moneta/adapters/lmdb.rb', line 75 def create(key, value, = {}) @backend.transaction do if @db.get(key) false else @db.put(key, value, Utils.only(, *PUT_FLAGS)) true end end end |
#delete(key, options = {}) ⇒ Object
Delete the key from the store and return the current value
49 50 51 52 53 54 55 56 |
# File 'lib/moneta/adapters/lmdb.rb', line 49 def delete(key, = {}) @backend.transaction do if value = @db.get(key) @db.delete(key) value end end 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.
65 66 67 68 69 70 71 72 |
# File 'lib/moneta/adapters/lmdb.rb', line 65 def increment(key, amount = 1, = {}) @backend.transaction do value = @db.get(key) value = Utils.to_int(value) + amount @db.put(key, value.to_s, Utils.only(, *PUT_FLAGS)) value end end |
#key?(key, options = {}) ⇒ Boolean
Exists the value with key
33 34 35 |
# File 'lib/moneta/adapters/lmdb.rb', line 33 def key?(key, = {}) !@db.get(key).nil? end |
#load(key, options = {}) ⇒ Object
Fetch value with key. Return nil if the key doesn’t exist
38 39 40 |
# File 'lib/moneta/adapters/lmdb.rb', line 38 def load(key, = {}) @db.get(key) end |