class Redis::Stream::DataCache
Public Class Methods
new(logger = Logger.new(STDOUT))
click to toggle source
# File lib/redis/stream/data_cache.rb, line 8 def initialize(logger = Logger.new(STDOUT)) @logger = logger @cache = Moneta.new(:HashFile, dir: Redis::Stream::Config[:data_cache] || "/tmp/cache", serializer: :json) end
Public Instance Methods
[](key)
click to toggle source
# File lib/redis/stream/data_cache.rb, line 18 def [](key) @cache.fetch(key) end
[]=(key, value)
click to toggle source
# File lib/redis/stream/data_cache.rb, line 13 def []=(key, value) @logger.info("CACHE - #{File.basename(__FILE__)}:#{__LINE__} - caching with key #{key}") @cache.store(key, value) end
build_key(data)
click to toggle source
# File lib/redis/stream/data_cache.rb, line 42 def build_key(data) key = "" if data && data.include?('payload') payload_data = data['payload'] else payload_data = data end if payload_data.include?("id") id = payload_data["id"].downcase key = "#{id}" key = "#{@key_prefix}_#{key}" unless @key_prefix.nil? || @key_prefix&.empty? end raise "Empty cache key" if key.nil? || key&.empty? key end
delete(key)
click to toggle source
# File lib/redis/stream/data_cache.rb, line 30 def delete(key) @cache.delete(key) end
include?(key)
click to toggle source
# File lib/redis/stream/data_cache.rb, line 22 def include?(key) key?(key) end
key?(key)
click to toggle source
# File lib/redis/stream/data_cache.rb, line 26 def key?(key) @cache.key?(key) end
key_prefix()
click to toggle source
# File lib/redis/stream/data_cache.rb, line 38 def key_prefix @key_prefix end
key_prefix=(prefix)
click to toggle source
# File lib/redis/stream/data_cache.rb, line 34 def key_prefix=(prefix) @key_prefix = prefix.downcase end
resolve_by_message(pid, payload, &block)
click to toggle source
# File lib/redis/stream/data_cache.rb, line 59 def resolve_by_message(pid, payload, &block) data = nil cache_key = build_key(payload) invalidate_cache(cache_key, payload) data = load_from_cache(cache_key) data = load_from_service(pid, cache_key, &block) if data.nil? data end
Private Instance Methods
get_from_cache(cache_key)
click to toggle source
# File lib/redis/stream/data_cache.rb, line 97 def get_from_cache(cache_key) key?(cache_key) data = self[cache_key] if data&.key?('parent') data = get_from_cache(self.build_key({'id' => data['parent']})) end data end
invalidate_cache(cache_key, payload)
click to toggle source
# File lib/redis/stream/data_cache.rb, line 70 def invalidate_cache(cache_key, payload) if payload&.include?('from_cache') && payload['from_cache'].eql?('0') delete(cache_key) @logger.warn("CACHE - #{File.basename(__FILE__)}:#{__LINE__} - invalidating key #{cache_key}") end end
load_from_cache(cache_key)
click to toggle source
# File lib/redis/stream/data_cache.rb, line 77 def load_from_cache(cache_key) data = nil if key?(cache_key) @logger.info("CACHE - #{File.basename(__FILE__)}:#{__LINE__} - fetching with key #{cache_key}") data = get_from_cache(cache_key) end data end
load_from_service(pid, cache_key) { |pid, cache_key| ... }
click to toggle source
# File lib/redis/stream/data_cache.rb, line 86 def load_from_service(pid, cache_key) data = nil data = yield pid, cache_key if block_given? if data.nil? || data&.empty? @logger.warn("CACHE - #{File.basename(__FILE__)}:#{__LINE__} - empty result for key #{cache_key} and id #{pid}") end data end