module RestGW2::Cache

Constants

EXPIRES_IN
LRU_SIZE

Public Instance Methods

default(logger) click to toggle source
# File lib/rest-gw2/server/cache.rb, line 9
def default logger
  @cache ||= Cache.pick(logger)
end
lru_cache(logger) click to toggle source
# File lib/rest-gw2/server/cache.rb, line 33
def lru_cache logger
  require 'lru_redux'
  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
memcache(logger) click to toggle source
# File lib/rest-gw2/server/cache.rb, line 17
def memcache logger
  require 'dalli'
  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(', ')}")
  client.extend(RestCore::DalliExtension)
  client
rescue LoadError, Dalli::RingError => e
  logger.debug("Skip memcached because: #{e}")
  nil
end
pick(logger) click to toggle source
# File lib/rest-gw2/server/cache.rb, line 13
def pick logger
  memcache(logger) || lru_cache(logger)
end