Sha256: 8a3993abb0b430e3f818bbd51831768d6436b4421a820454aa2b9ba2c213f49b

Contents?: true

Size: 1.54 KB

Versions: 9

Compression:

Stored size: 1.54 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
        ::LocalMemCache.clear_namespace(@namespace)
      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

9 entries across 9 versions & 3 rubygems

Version Path
Pistos-ramaze-2009.04.08 lib/ramaze/cache/localmemcache.rb
manveru-ramaze-2009.04.08 lib/ramaze/cache/localmemcache.rb
manveru-ramaze-2009.04.18 lib/ramaze/cache/localmemcache.rb
manveru-ramaze-2009.04.22 lib/ramaze/cache/localmemcache.rb
manveru-ramaze-2009.04 lib/ramaze/cache/localmemcache.rb
manveru-ramaze-2009.05.08 lib/ramaze/cache/localmemcache.rb
manveru-ramaze-2009.05 lib/ramaze/cache/localmemcache.rb
ramaze-2009.04 lib/ramaze/cache/localmemcache.rb
ramaze-2009.05 lib/ramaze/cache/localmemcache.rb