Class: DangoFrameworkModule::SharedMemoryStore
- Defined in:
- lib/dango/shared/memory_store.rb
Overview
共有メモリ
Instance Method Summary collapse
- #[](key) ⇒ Object
- #[]=(key, value) ⇒ Object
-
#has_key?(key) ⇒ Boolean
キーがあるかどうかを返す.
-
#initialize ⇒ SharedMemoryStore
constructor
A new instance of SharedMemoryStore.
- #keys ⇒ Object
-
#synchronize(key) ⇒ Object
排他処理ブロック用.
- #to_hash ⇒ Object
-
#transaction(key) ⇒ Object
トランザクション処理ブロックを作る.
Constructor Details
#initialize ⇒ SharedMemoryStore
Returns a new instance of SharedMemoryStore.
11 12 13 14 15 |
# File 'lib/dango/shared/memory_store.rb', line 11 def initialize @data = {} @mutex = {} @size = 0 end |
Instance Method Details
#[](key) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/dango/shared/memory_store.rb', line 52 def [](key) if !@mutex.has_key?(key) # 未定義キーならエラー return(nil) # raise(DangoFrameworkError, "Shared key is not exist.") end # ロックしてデータを読む if @mutex[key].locked? data = @data[key].deep_dup else data = @mutex[key].synchronize do @data[key].deep_dup end end data end |
#[]=(key, value) ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/dango/shared/memory_store.rb', line 69 def []=(key, value) # キーはString Symbolのみ if key.class != String && key.class != Symbol raise(DangoFrameworkError, "Shared key is not String or Symbol.") end # 未定義なら定義する if !@mutex.has_key?(key) @mutex[key] = Mutex.new end # ロックしてデータを入れる if @mutex[key].locked? @data[key] = value.deep_dup else @mutex[key].synchronize do @data[key] = value.deep_dup end end end |
#has_key?(key) ⇒ Boolean
キーがあるかどうかを返す
48 49 50 |
# File 'lib/dango/shared/memory_store.rb', line 48 def has_key?(key) # キーがあるかどうかを返す @mutex.has_key?(key) end |
#keys ⇒ Object
17 18 19 |
# File 'lib/dango/shared/memory_store.rb', line 17 def keys @data.keys end |
#synchronize(key) ⇒ Object
排他処理ブロック用
39 40 41 42 43 44 45 46 |
# File 'lib/dango/shared/memory_store.rb', line 39 def synchronize(key) # 排他処理ブロック用 if !@mutex.has_key?(key) # 未定義キーならエラー raise(DangoFrameworkError, "Shared key is not exist.") end @mutex[key].synchronize do yield end end |
#to_hash ⇒ Object
21 22 23 24 25 26 27 |
# File 'lib/dango/shared/memory_store.rb', line 21 def to_hash hash = {} @data.keys.each do |key| hash[key] = @data[key].deep_dup end hash end |
#transaction(key) ⇒ Object
トランザクション処理ブロックを作る
29 30 31 32 33 34 35 36 37 |
# File 'lib/dango/shared/memory_store.rb', line 29 def transaction(key) # トランザクション処理ブロックを作る if !@mutex.has_key?(key) # 未定義キーならエラー raise(DangoFrameworkError, "Shared key is not exist.") end @mutex[key].synchronize do data = yield(@data[key].deep_dup) @data[key] = data.deep_dup end end |