以设定的间隔更新控制器变量

imr*_*ole 4 ruby ruby-on-rails

我目前有以下简单的控制器:

class SimpleController < ApplicationController
  def index
    @results = fetch_results
  end
end
Run Code Online (Sandbox Code Playgroud)

fetch_results是一个相当昂贵的操作,所以虽然上述工作,我不想每次刷新页面时运行它.如何解除更新,@results以便按固定的时间表更新,让我们说每15分钟更新一次.

这样,每次页面加载时,它都会返回当前@results值,最坏的情况是过时14分59秒.

spi*_*ann 7

您可能希望使用Rails` 低级缓存:

def index
  @results = Rails.cache.fetch('fetched_results', expires_in: 15.minutes) do
    fetch_results
  end
end
Run Code Online (Sandbox Code Playgroud)

阅读有关如何在Rails指南中配置Rails的缓存存储的更多信息.