ActiveRecord如何在应用程序级别查询缓存?

时间:2009-02-11 03:07:20

标签: ruby-on-rails activerecord

调用控制器的操作时,将启用ActiveRecord查询缓存。我也知道你可以这样做,为给定的代码块临时启用给定Model的缓存:

User.cache do  
    ....
end

但有没有办法为其他上下文启用查询缓存(例如,当使用./script/runner在rails环境下运行脚本时)?

4 个答案:

答案 0 :(得分:3)

ActiveRecord查询缓存仅在特定操作(即请求)的持续时间内存在。如果您希望缓存对象存活更长时间或在进程之间使用,则需要查看memcached之类的内容。

答案 1 :(得分:0)

This plugin将使用memcached持久保存查询缓存。

答案 2 :(得分:0)

一个简单的解决方案是直接在命令行上将给定script/runner的代码包装在一个块中:

script/runner "User.cache { ... }"

请注意,缓存不仅适用于User模型,还适用于代码块中执行的所有查询。

答案 3 :(得分:0)

要在运行脚本时获得查询缓存,您需要使用以下代码包装任何代码:

ActiveRecord::Base.connection.cache do
  your_code_here
end

看起来Rails会自动为正常调用Action设置查询缓存,但是您必须在其他情况下手动进行。