3

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

但它似乎仍然阻止遇到过期值的第一个请求(只有在此之后的后续请求才会获取旧值并在更新缓存时快速返回)。

我想我很惊讶它没有以同样的方式服务第一个过期的请求,并且想知道是否有一个共同的模式或者它是否必须是自定义的。

4

2 回答 2

0

我现在用猴子修补了这样的东西:https ://gist.github.com/4062316

不确定它有多安全,但似乎正在工作。不过,在标准的 Rails.cache 中看到这样的东西会很棒。

于 2012-11-12T22:14:38.550 回答
0

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

我在两个环境中有 Rails 应用程序:管理员和生产。生产永不过期缓存。管理员总是在页面上强制缓存未命中。

一旦你建立了所有的缓存。它永不过期。除非您可以从管理员那里执行此操作。由于管理员可以保证第一次访问这些网页,使用 :race_condition_ttl,这种方法效果很好。

于 2014-03-14T12:51:23.050 回答