三种缓存技术:页面,动作和片段。
Rails 默认支持片段缓存。如果想使用页面缓存和动作缓存,要在 Gemfile 中加入 actionpack-page_caching 和 actionpack-action_caching。
在开发环境中若想使用缓存,要把
config.action_controller.perform_caching
选项设为 true。这个选项一般都在各环境的设置文件(config/environments/*.rb)中设置,在开发环境和测试环境默认是禁用的,在生产环境中默认是开启的。
config.action_controller.perform_caching = true
这三种缓存技术在缓存数值和对象方面不太实用,在这种场景下需要使用底层缓存
底层缓存
实现底层缓存最有效地方式是使用 Rails.cache.fetch 方法。这个方法既可以从缓存中读取数据,也可以把数据写入缓存。传入单个参数时,读取指定键对应的值。传入代码块时,会把代码块的计算结果存入缓存的指定键中,然后返回计算结果。
以下面的代码为例。程序中有个 Product 模型,其中定义了一个实例方法,用来查询竞争对手网站上的商品价格。这个方法的返回结果最好使用底层缓存:
class Product < ActiveRecord::Base
def competing_price
Rails.cache.fetch("#{cache_key}/competing_price", expires_in: 12.hours) do
Competitor::API.find_price(id)
end
end
end
注意,在这个例子中使用了 cache_key 方法,所以得到的缓存键名是这种形式:products/233-20140225082222765838000/competing_price。cache_key 方法根据模型的 id 和 updated_at 属性生成键名。这是最常见的做法,因为商品更新后,缓存就失效了。一般情况下,使用底层缓存保存实例的相关信息时,都要生成缓存键。
如果想要手动清除该缓存则使用
Rails.cache.delete("#{cache_key}")
参考
http://guides.ruby-china.org/caching_with_rails.html
http://www.jianshu.com/p/b3dfe567a539