为什么Rails.cache.fetch的:race_condition_ttl选项仍然阻止第一个请求?

时间:2012-11-12 07:53:22

标签: ruby-on-rails caching

Rails.cache.fetch的:race_condition_ttl选项似乎真的接近我想要的:http://api.rubyonrails.org/classes/ActiveSupport/Cache/Store.html#method-i-fetch

但似乎它仍然阻止了第一个遇到过期值的请求(它只是后来的请求,获取旧值并在缓存更新时快速返回)。

我想我很惊讶它不会以同样的方式提供第一个过期的请求,并且想知道是否存在这种常见模式或是否必须自定义。

2 个答案:

答案 0 :(得分:0)

我现在最终修补了这样的东西:https://gist.github.com/4062316

不确定它有多安全,但似乎有效。在标准的Rails.cache中看到这样的东西真是太棒了。

答案 1 :(得分:0)

我用另一种方法解决了这个问题:没有设置expires_in,只有在请求管理员请求时才强制缓存未命中。

我在两个环境中都有rails应用程序:admin和production。生产永不过期缓存。 Admin始终强制页面上的缓存未命中。

一旦构建了所有缓存。它永不过期。除了你可以从管理员这样做。由于管理员保证第一次访问这些网页,使用:race_condition_ttl,这种方法效果很好。