我目前有以下简单的控制器:
class SimpleController < ApplicationController
def index
@results = fetch_results
end
end
fetch_results
是一项相当昂贵的操作,所以尽管上述方法有效,但我不希望每次刷新页面时都运行它。如何解除@results
的更新,以便按固定的时间表更新,让我们每隔15分钟说一次。
这样,每次加载页面时,它都会返回当前的@results
值,最坏的情况是14分59秒过时。
答案 0 :(得分:7)
您可能希望使用Rails` low level caching:
def index
@results = Rails.cache.fetch('fetched_results', expires_in: 15.minutes) do
fetch_results
end
end
在Rails指南中阅读有关如何configure Rails' caching stores的更多信息。
答案 1 :(得分:1)
我会将其存储在数据库 表中,并通过background job定期更新。更新将与某些事件相关,例如,如果用户执行了可能更改结果的操作,则会重新计算和更新结果。
另一种解决方案是使用 cron作业定期更新result
,例如每小时更新一次。有一个很好的gem可以处理它。