如何强制Rails(2.3.x)MemCacheStore从服务器读取值?

时间:2010-09-17 18:23:17

标签: ruby-on-rails memcached

长话短说:我有一些控制器逻辑从缓存中请求X次X值,如果它实际上在 cache 请求(这都是在单个 HTTP 请求的上下文中)。

然而,似乎Rails MemCacheStoreStrategy::LocalCache包裹自己,所以无论我多少次请求该值,它总是返回从服务器提取的第一个值,无论该值是否已更改请求之间的服务器。

我希望:force方法有一些未记录的read()选项,但没有这样的运气。

所以我的下一个希望就是以某种方式修补它,以获得我需要的东西,但我很难过。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

通过对bypass_local_cache 3.0中的activesupport功能进行反向移植和猴子修补,让它工作(感谢@KandadaBoggu建议)

module ActiveSupport
  module Cache
    module Strategy
      module LocalCache
        protected
        def bypass_local_cache
          save_cache = Thread.current[thread_local_key]
          begin
            Thread.current[thread_local_key] = nil
            yield
          ensure
            Thread.current[thread_local_key] = save_cache
          end
        end
      end
    end
  end
end

答案 1 :(得分:1)

我不确定这是否有用但值得一试:

cache.send(:bypass_local_cache) { cache.read("bar")}

bar是您尝试访问的密钥。

注意:bypass_local_cache是私有方法。