Sha256: 0c3bba0e034b8f0221af7305ea20be6c0062137e83a695bd3efa8edb3fb29d22

Contents?: true

Size: 1.51 KB

Versions: 3

Compression:

Stored size: 1.51 KB

Contents

#          Copyright (c) 2009 Michael Fellinger m.fellinger@gmail.com
# All files in this distribution are subject to the terms of the Ruby license.

require 'localmemcache'

module Ramaze
  class Cache

    # Cache based on the localmemcache library which utilizes mmap to share
    # strings in memory between ruby instances.
    class LocalMemCache
      include Cache::API

      OPTIONS = {
        :size_mb    => 1024,
        :serialize  => true,
        :serializer => ::Marshal, # something that responds to ::load and ::dump
      }

      # Connect to localmemcache
      def cache_setup(host, user, app, name)
        @namespace = [host, user, app, name].compact.join('-')

        options = {:namespace => @namespace}.merge(OPTIONS)

        @serialize = options.delete(:serialize)
        @serializer = options.delete(:serializer)

        @store = ::LocalMemCache.new(options)
      end

      # Wipe out _all_ data in localmemcached, use with care.
      def cache_clear
        @store.clear
      end

      def cache_delete(*args)
        super{|key| @store.delete(key.to_s) }
      end

      # NOTE:
      #   * We have no way of knowing whether the value really is nil, we
      #     assume you wouldn't cache nil and return the default instead.
      def cache_fetch(*args)
        super{|key|
          value = @store[key.to_s]
          @serializer.load(value) if value
        }
      end

      def cache_store(*args)
        super{|key, value| @store[key.to_s] = @serializer.dump(value) }
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 2 rubygems

Version Path
manveru-ramaze-2009.06.04 lib/ramaze/cache/localmemcache.rb
manveru-ramaze-2009.06 lib/ramaze/cache/localmemcache.rb
ramaze-2009.06 lib/ramaze/cache/localmemcache.rb