Class: Undertow::Store::MemoryStore
- Defined in:
- lib/undertow/store/memory_store.rb
Overview
Store adapter backed by in-process memory.
Uses Mutex-protected Ruby Sets for thread safety. Intended for use in test environments and single-process development setups.
Lock operations are no-ops, there is no scheduler race in a single process.
Undertow.configure do |c|
c.store = Undertow::Store::MemoryStore.new
end
WARNING: State is not shared across processes. Do not use in multi-process or multi-dyno deployments.
Instance Method Summary collapse
- #add_members(key, members) ⇒ Object
-
#initialize ⇒ MemoryStore
constructor
A new instance of MemoryStore.
-
#lock_acquire ⇒ Object
No-op, single process, no scheduler race possible.
-
#lock_release(key) ⇒ Object
No-op.
- #member_count(key) ⇒ Object
- #members(key) ⇒ Object
- #pop_members(key, count) ⇒ Object
- #remove_member(key, member) ⇒ Object
Constructor Details
#initialize ⇒ MemoryStore
Returns a new instance of MemoryStore.
21 22 23 24 25 |
# File 'lib/undertow/store/memory_store.rb', line 21 def initialize super @sets = Hash.new { |h, k| h[k] = Set.new } @mutex = Mutex.new end |
Instance Method Details
#add_members(key, members) ⇒ Object
27 28 29 |
# File 'lib/undertow/store/memory_store.rb', line 27 def add_members(key, members) @mutex.synchronize { @sets[key].merge(Array(members)) } end |
#lock_acquire ⇒ Object
No-op, single process, no scheduler race possible.
52 53 54 |
# File 'lib/undertow/store/memory_store.rb', line 52 def lock_acquire(*) true end |
#lock_release(key) ⇒ Object
No-op.
57 58 59 |
# File 'lib/undertow/store/memory_store.rb', line 57 def lock_release(key) # nothing to do end |
#member_count(key) ⇒ Object
47 48 49 |
# File 'lib/undertow/store/memory_store.rb', line 47 def member_count(key) @mutex.synchronize { @sets[key].size } end |
#members(key) ⇒ Object
35 36 37 |
# File 'lib/undertow/store/memory_store.rb', line 35 def members(key) @mutex.synchronize { @sets[key].to_a } end |
#pop_members(key, count) ⇒ Object
39 40 41 42 43 44 45 |
# File 'lib/undertow/store/memory_store.rb', line 39 def pop_members(key, count) @mutex.synchronize do members = @sets[key].first(count) members.each { |m| @sets[key].delete(m) } members end end |
#remove_member(key, member) ⇒ Object
31 32 33 |
# File 'lib/undertow/store/memory_store.rb', line 31 def remove_member(key, member) @mutex.synchronize { @sets[key].delete(member) } end |