长话短说:我有一些控制器逻辑从缓存中请求X次X值,如果它实际上在 cache 请求(这都是在单个 HTTP 请求的上下文中)。
然而,似乎Rails MemCacheStore
用Strategy::LocalCache
包裹自己,所以无论我多少次请求该值,它总是返回从服务器提取的第一个值,无论该值是否已更改请求之间的服务器。
我希望:force
方法有一些未记录的read()
选项,但没有这样的运气。
所以我的下一个希望就是以某种方式修补它,以获得我需要的东西,但我很难过。
有什么建议吗?
答案 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
是私有方法。