Class: MessageBus::DistributedCache

Inherits:
Object
  • Object
show all
Defined in:
lib/message_bus/distributed_cache.rb

Overview

Like a hash, just does its best to stay in sync across the farm. On boot all instances are blank, but they populate as various processes fill it up.

Defined Under Namespace

Classes: Manager

Constant Summary collapse

DEFAULT_SITE_ID =
'default'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(key, manager: nil, namespace: true, app_version: nil) ⇒ DistributedCache

Returns a new instance of DistributedCache.



118
119
120
121
122
123
124
125
126
127
128
# File 'lib/message_bus/distributed_cache.rb', line 118

def initialize(key, manager: nil, namespace: true, app_version: nil)
  @key = key
  @data = {}
  @manager = manager || DistributedCache.default_manager
  @manager.app_version = app_version if app_version
  @namespace = namespace
  @app_version = app_version

  @manager.ensure_subscribe!
  @manager.register(self)
end

Instance Attribute Details

#keyObject (readonly)

Returns the value of attribute key.



116
117
118
# File 'lib/message_bus/distributed_cache.rb', line 116

def key
  @key
end

Class Method Details

.default_managerObject



112
113
114
# File 'lib/message_bus/distributed_cache.rb', line 112

def self.default_manager
  @default_manager
end

Instance Method Details

#[](k) ⇒ Object



141
142
143
144
# File 'lib/message_bus/distributed_cache.rb', line 141

def [](k)
  k = k.to_s if Symbol === k
  hash[k]
end

#[]=(k, v) ⇒ Object



135
136
137
138
139
# File 'lib/message_bus/distributed_cache.rb', line 135

def []=(k, v)
  k = k.to_s if Symbol === k
  @manager.set(self, k, v)
  hash[k] = v
end

#clearObject



152
153
154
155
# File 'lib/message_bus/distributed_cache.rb', line 152

def clear
  @manager.clear(self)
  hash.clear
end

#delete(k, publish: true) ⇒ Object



146
147
148
149
150
# File 'lib/message_bus/distributed_cache.rb', line 146

def delete(k, publish: true)
  k = k.to_s if Symbol === k
  @manager.delete(self, k) if publish
  hash.delete(k)
end

#hash(site_id_arg = nil) ⇒ Object



157
158
159
160
161
162
163
164
165
166
167
168
# File 'lib/message_bus/distributed_cache.rb', line 157

def hash(site_id_arg = nil)
  site_id =
    if @namespace
      site_id_arg ||
        (MessageBus.site_id_lookup && MessageBus.site_id_lookup.call) ||
        DEFAULT_SITE_ID
    else
      DEFAULT_SITE_ID
    end

  @data[site_id] ||= {}
end

#identityObject



130
131
132
133
# File 'lib/message_bus/distributed_cache.rb', line 130

def identity
  # fork resilient / multi machine identity
  (@seed_id ||= SecureRandom.hex) + "#{Process.pid}"
end