Sha256: ab670fba6d1add471bd8c07c19d4371a4560ce4826593252a4bc6dcf5ca71001

Contents?: true

Size: 1.9 KB

Versions: 2

Compression:

Stored size: 1.9 KB

Contents

require 'dalli-elasticache'
require 'alephant/logger'

module Alephant
  module Broker
    module Cache
      class Client
        include Logger

        DEFAULT_TTL = 2_592_000

        def initialize
          if config_endpoint.nil?
            logger.debug 'Broker::Cache::Client#initialize: No config endpoint, NullClient used'
            logger.metric 'NoConfigEndpoint'
            @client = NullClient.new
          else
            @elasticache ||= ::Dalli::ElastiCache.new(config_endpoint, expires_in: ttl)
            @client ||= @elasticache.client
          end
        end

        def get(key)
          versioned_key = versioned(key)
          result        = @client.get(versioned_key)

          logger.info("Broker::Cache::Client#get key: #{versioned_key} - #{result ? 'hit' : 'miss'}")
          logger.metric('GetKeyMiss') unless result

          return result if result

          set(key, yield) if block_given?
        rescue StandardError => error
          logger.info(event: 'ErrorCaught', method: "#{self.class}#get", error: error)
          yield if block_given?
        end

        def set(key, value, custom_ttl = nil)
          versioned_key = versioned(key)
          set_ttl       = custom_ttl || ttl

          logger.info("#{self.class}#set - key: #{versioned_key}, ttl: #{set_ttl}")

          @client.set(versioned_key, value, set_ttl)

          value
        end

        private

        def config_endpoint
          Broker.config[:elasticache_config_endpoint] || Broker.config['elasticache_config_endpoint']
        end

        def ttl
          Broker.config[:elasticache_ttl] || Broker.config['elasticache_ttl'] || DEFAULT_TTL
        end

        def versioned(key)
          [key, cache_version].compact.join('_')
        end

        def cache_version
          Broker.config[:elasticache_cache_version] || Broker.config['elasticache_cache_version']
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
alephant-broker-3.17.0 lib/alephant/broker/cache/client.rb
alephant-broker-3.16.2 lib/alephant/broker/cache/client.rb