Sha256: 3cfdd25b8522b87b59bd93d613cc1ac89c02816953ca06d3f9f7303439d2a2ec

Contents?: true

Size: 1.18 KB

Versions: 3

Compression:

Stored size: 1.18 KB

Contents

require 'dalli'
require 'legion/cache/pool'

module Legion
  module Cache
    module Memcached
      include Legion::Cache::Pool
      extend self

      def client(servers: Legion::Settings[:cache][:servers], **opts)
        return @client unless @client.nil?

        @pool_size = opts.key?(:pool_size) ? opts[:pool_size] : Legion::Settings[:cache][:pool_size] || 10
        @timeout = opts.key?(:timeout) ? opts[:timeout] : Legion::Settings[:cache][:timeout] || 5

        Dalli.logger = Legion::Logging
        @client = ConnectionPool.new(size: pool_size, timeout: timeout) do
          Dalli::Client.new(servers, Legion::Settings[:cache].merge(opts))
        end

        @connected = true
        @client
      end

      def get(key)
        client.with { |conn| conn.get(key) }
      end

      def fetch(key, ttl = nil)
        client.with { |conn| conn.fetch(key, ttl) }
      end

      def set(key, value, ttl = 180)
        client.with { |conn| conn.set(key, value, ttl).positive? }
      end

      def delete(key)
        client.with { |conn| conn.delete(key) == true }
      end

      def flush(delay = 0)
        client.with { |conn| conn.flush(delay).first }
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
legion-cache-1.2.0 lib/legion/cache/memcached.rb
legion-cache-1.1.1 lib/legion/cache/memcached.rb
legion-cache-1.1.0 lib/legion/cache/memcached.rb