lib/rest-gw2/server/cache.rb in rest-gw2-0.4.0 vs lib/rest-gw2/server/cache.rb in rest-gw2-0.5.0

- old
+ new

@@ -1,8 +1,12 @@ +# frozen_string_literal: true module RestGW2 module Cache + EXPIRES_IN = 600 + LRU_SIZE = 8192 + module_function def default logger @cache ||= Cache.pick(logger) end @@ -10,12 +14,12 @@ memcache(logger) || lru_cache(logger) end def memcache logger require 'dalli' - client = Dalli::Client.new - File.open(IO::NULL) do |null| + client = Dalli::Client.new(nil, :expires_in => EXPIRES_IN) + File.open(IO::NULL, 'w') do |null| Dalli.logger = Logger.new(null) client.alive! Dalli.logger = logger end logger.info("Memcached connected to #{client.version.keys.join(', ')}") @@ -26,11 +30,17 @@ nil end def lru_cache logger require 'lru_redux' - logger.info("LRU cache size: 100") - LruRedux::ThreadSafeCache.new(100) + logger.info("LRU cache size: #{LRU_SIZE}") + cache = LruRedux::ThreadSafeCache.new(LRU_SIZE) + cache.extend(Module.new{ + def fetch key # original fetch could deadlock + self[key] || self[key] = yield + end + }) + cache rescue LoadError => e logger.debug("Skip LRU cache because: #{e}") nil end end