lib/circuitbox/memory_store.rb in circuitbox-2.0.0.pre1 vs lib/circuitbox/memory_store.rb in circuitbox-2.0.0.pre2
- old
+ new
@@ -1,18 +1,19 @@
-# frozen-string-literal: true
+# frozen_string_literal: true
-require_relative 'memory_store/compactor'
+require_relative 'memory_store/monotonic_time'
require_relative 'memory_store/container'
class Circuitbox
class MemoryStore
include MonotonicTime
def initialize(compaction_frequency: 60)
@store = {}
@mutex = Mutex.new
- @compactor = Compactor.new(store: @store, frequency: compaction_frequency)
+ @compaction_frequency = compaction_frequency
+ @compact_after = current_second + compaction_frequency
end
def store(key, value, opts = {})
@mutex.synchronize do
@store[key] = Container.new(value: value, expiry: opts.fetch(:expires, 0))
@@ -51,17 +52,19 @@
end
private
def fetch_container(key)
- @compactor.run
+ current_time = current_second
+ compact(current_time) if @compact_after < current_time
+
container = @store[key]
return unless container
- if container.expired?
+ if container.expired_at?(current_time)
@store.delete(key)
nil
else
container
end
@@ -69,8 +72,13 @@
def fetch_value(key)
container = fetch_container(key)
return unless container
container.value
+ end
+
+ def compact(current_time)
+ @store.delete_if { |_, value| value.expired_at?(current_time) }
+ @compact_after = current_time + @compaction_frequency
end
end
end