我在 Rails 缓存指南http://guides.rubyonrails.org/caching_with_rails.html中没有看到这个问题的解释,所以我想知道在这个例子中我是否可以问一下缓存是如何工作的。在我的用户个人资料页面上,我缓存了用户说的语言并将有效期设置为 15 分钟。当我这样做时,我假设如果用户在这 15 分钟到期之前更新他的语言,那么更新的语言将不会显示,因为缓存没有过期。但是,当我在我的应用程序上测试它时,更新的语言会立即显示,所以我假设更新会破坏缓存。如果是这样,那我为什么不将到期日期设置为 1 小时或无穷大呢?
@languages = Rails.cache.fetch("lang", :expires_in => 15.minutes) do
Language.where({:user_id => @user.id})
end
请注意,如果这很重要,我将使用带有 memcached 的 Rails 4。
更新,如果到期时间只是由于大小限制而清除缓存,我应该将到期时间设置为多长时间?
我的个人资料页面上有很多信息(大约 15 个类似于下面的查询),如果用户不断刷新页面,我希望缓存这些信息,因此我打算这样做
@endorsements = Rails.cache.fetch("endorsements", :expires_in => 15.minutes) do
Endorsement.where({:subject_id => @user.id})
end
@languages = Rails.cache.fetch("lang", :expires_in => 15.minutes) do
Language.where({:user_id => @user.id})
end