# Standard Rails.cache is lacking support for this interface, possibly yank all in from redis:cache and start using this instead # class Cache def initialize(redis=nil) @redis = redis end def redis @redis || $redis end def fetch(key, options={}) result = redis.get key if result.nil? if expiry = options[:expires_in] if block_given? result = yield redis.setex(key, expiry, result) end else if block_given? result = yield redis.set(key, result) end end end if family = family_key(options[:family]) redis.sadd(family, key) end result end def delete(key) redis.del(key) end def delete_by_family(key) k = family_key(key) redis.smembers(k).each do |member| delete(member) end redis.del(k) end private def family_key(name) if name "FAMILY_#{name}" end end end