【问题标题】:Why does the :race_condition_ttl option for Rails.cache.fetch still block the first request?为什么 Rails.cache.fetch 的 :race_condition_ttl 选项仍然阻塞第一个请求?
【发布时间】:2014-03-14 20:51:23
【问题描述】:

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

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

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

【问题讨论】:

    标签: ruby-on-rails caching


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-10-31
        • 1970-01-01
        • 1970-01-01
        • 2016-10-20
        • 2016-05-24
        • 1970-01-01
        • 2017-04-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多