Ruby on rails 随时在控制器中加载变量

Ruby on rails 随时在控制器中加载变量,ruby-on-rails,ruby,whenever,Ruby On Rails,Ruby,Whenever,我正在做一个项目,我想不时地做一个mysql查询。查询太长,实际上是在用户发出请求时完成的 我担心如果有很多用户这样做,应用程序的响应速度会太慢。因此,我希望执行查询并不时地用查询响应加载它,然后,在请求时,来自控制器的操作将使用此变量,而不是一次又一次地执行查询 我怎么能用where来做呢 在日程表上 every 5.minutes do runner "variable = Model.method" end 在控制器上 def some_action "the variable

我正在做一个项目,我想不时地做一个mysql查询。查询太长,实际上是在用户发出请求时完成的

我担心如果有很多用户这样做,应用程序的响应速度会太慢。因此,我希望执行查询并不时地用查询响应加载它,然后,在请求时,来自控制器的操作将使用此变量,而不是一次又一次地执行查询

我怎么能用where来做呢

在日程表上

every 5.minutes do
    runner "variable = Model.method"
end
在控制器上

def some_action
"the variable should be loaded here"

end

我同意Damien Roche的观点,您需要缓存查询结果。但是,我不认为他给出的示例是最好的答案,因为您不希望用户在未缓存时等待查询,在缓存过期时等待查询,即使这种情况很少发生。
因此,您需要像您建议的那样,将定期查询与where结合起来,并使用缓存机制来存储查询结果,并从控制器中的缓存中检索查询结果。由于runner是一个不同的进程,因此您必须使用runner和应用程序都可用的缓存。我建议你看看Redis。让它工作起来应该非常简单,以便运行程序运行查询,并在查询完成时将结果集写入Redis cahce。然后控制器将从缓存中读取结果集。

这是完全错误的方法。使用缓存:。我将这两种方法结合起来,用于随时计划调用一个方法并缓存它,然后在控制器上,使用Rails.cache.read()获取值。这使得应用程序运行得更快。