class Memcache

this file is part of manqod manqod is distributed under the CDDL licence the author of manqod is Dobai-Pataky Balint(dpblnt@gmail.com)

Attributes

memcache[R]
memcache_lib[R]
version[R]

Public Class Methods

new(servers,options={}) click to toggle source
# File lib/Memcache.rb, line 6
def initialize(servers,options={})
        @prefix_key=options[:prefix_key]
        @memcache_lib=nil
        @memcache=nil
        @version=nil
        begin
                @version=Memcached::VERSION
                einfo("using memcached(#{version})")
                @memcache_lib=:memcached
        rescue =>err
                begin
                        @version=Dalli::VERSION
                        einfo("falling back memcache to dalli(#{version})")
                        @memcache_lib=:dalli
                rescue =>err
                        eerror("No memcache lib available, Follow install instructions on http://manqod.sourceforge.net")
                end
        end

        case memcache_lib
                when :memcached
                        options[:default_ttl] = 0
                        options[:timeout] = 30
                        @memcache = Memcached.new(servers,options)
                when :dalli
                        options.delete(:prefix_key)
                        options[:expires_in]=0
                        @memcache = Dalli::Client.new(servers,options)
                else
                        eeror("No memcache lib available")
        end
end

Public Instance Methods

get(key) click to toggle source
# File lib/Memcache.rb, line 40
def get(key)
        case memcache_lib
                when :memcached
                        begin
                                return memcache.get(key)
                        rescue Memcached::NotFound
                                ewarn("cannot load data for key:#{key.inspect}")
                                return nil
                        end
                when :dalli
                        if key.class.name == "Array"
                                values=Hash.new
                                key.each{|k| values[k]=dalli_get_one(k)}
                                return values
                        else
                                dalli_get_one(key)
                        end
        end
end
to_s() click to toggle source
# File lib/Memcache.rb, line 61
def to_s
        "Memcache(#{memcache_lib}-#{version})[#{@prefix_key}]"
end

Private Instance Methods

dalli_get_one(key) click to toggle source
# File lib/Memcache.rb, line 66
def dalli_get_one(key)
        key=@prefix_key + key
        begin
                value = memcache.get(key)
        rescue
                #we were connected to the server, we now retry 10 secs
                t=Time.new if t.nil?
                retry unless Time.new-t>10
        end
        bytes = value.unpack('cc') if value && value.is_a?(String) && value.size > 2
        if bytes && bytes[0] == 4 && bytes[1] == 8
                return Marshal.load(value) rescue value
        end
        return value
end