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