Class: ConvertSdk::Stores::MemoryStore
- Inherits:
-
Object
- Object
- ConvertSdk::Stores::MemoryStore
- Defined in:
- lib/convert_sdk/stores/memory_store.rb
Overview
The default in-process store: a plain Hash guarded by a Mutex.
MemoryStore is what DataStoreManager falls back to when no custom
store is supplied (or a supplied store fails validation). It satisfies the
duck-typed store contract — #get / #set — with both operations
serialized through a single mutex so concurrent reads and writes from
multiple threads cannot corrupt the underlying Hash or lose a write.
Per-process limitation
State lives only in this process's memory. It is NOT shared across
processes, workers, or machines: sticky bucketing (Story 2.11) and goal
deduplication (Story 4.3) that round-trip through a MemoryStore are
therefore consistent only within the lifetime of a single process. A
forked web worker, a restarted process, or a second host each start with
an empty store. For cross-process stickiness and dedup, supply a shared
backing store — RedisStore (Story 2.2) is the first-party option.
Thread safety
All access to the backing Hash is serialized by @mutex; there is no
public path to the Hash that bypasses the lock.
Instance Method Summary collapse
-
#get(key) ⇒ Object?
Read the value stored under
key. -
#initialize ⇒ MemoryStore
constructor
A new instance of MemoryStore.
-
#set(key, value) ⇒ Object
Store
valueunderkey, overwriting any existing value.
Constructor Details
#initialize ⇒ MemoryStore
Returns a new instance of MemoryStore.
31 32 33 34 35 |
# File 'lib/convert_sdk/stores/memory_store.rb', line 31 def initialize # Thread safety: guarded by @mutex. @data = {} @mutex = Thread::Mutex.new end |
Instance Method Details
#get(key) ⇒ Object?
Read the value stored under key.
41 42 43 |
# File 'lib/convert_sdk/stores/memory_store.rb', line 41 def get(key) @mutex.synchronize { @data[key] } end |
#set(key, value) ⇒ Object
Store value under key, overwriting any existing value.
50 51 52 |
# File 'lib/convert_sdk/stores/memory_store.rb', line 50 def set(key, value) @mutex.synchronize { @data[key] = value } end |