Cacheクラス
前回作った、configクラスを使いつつ、シングルトン化し、
ブロックの結果をキャッスする関数を生やしたかんじ。
ソース
require 'singleton' require 'memcache' require 'bei/config' require 'pp' module Bei class Cache < Memcache include Singleton def initialize super ( { :servers => Bei::Config.instance.get(:memcached_servers) } ) end def cacheable(key,expire=60*3) raise "NO_BLOCK_ERROR" unless block_given? unless( value = self.get(key) ) #pp 'from value' value = yield() self.set(key,value,expire) else #pp 'from cache' end return value end end
使い方
こんな
かん
じ
cache = Bei::Cache.instance() # Memcache の継承なので、既にある関数はそのまま使える。 cache.set('hi','hihihi') hi = cache.get('hi') # blockからデータ取得 my_data = cache.cachable('my/3/data', 60 * 1) { { :user_id => 3 } } # 3 # memcachedからデータ取得 my_data = cache.cachable('my/3/data', 60 * 1) { { :user_id => 2 } } # 3 (2じゃない)