rails缓存技术

三种缓存技术:页面,动作和片段。

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

你可能感兴趣的:(rails缓存技术)