参考链接:
https://gist.github.com/xiangzhuyuan/cb1bfb00c5d56583bb5d
https://ruby-china.org/topics/19389
https://ruby-china.org/wiki/rails-caching
https://www.youtube.com/watch?v=eO8tTPDEB8A&index=4&list=WL 等一系列 railscast 视频
这几个链接对 rails cache 说的很详细,看不懂的话可以先多看看视频,然后再去读一遍文章,这样更能理解一些吧。
下面是我初步的一些理解以及初步所能掌握的部分,以后有待完善。
缓存的作用:
避免频繁查询数据库,在最短的时间内把真正需要的内容返回给客户端。(cache是提高应用性能重要的一个环节。)
缓存的使用情境:
经常被访问到的页面,并且页面内容不经常改变,且对时效性要求不是十分严格,或者是,在缓存使用过程中要特别注意真正的内容是否被改变,及时捕捉变化并响应最新的内容。一定要保持缓存和实际记录的一致性。不一致的缓存会导致很多不必要的问题。
如果经常改变内容的页面,可以使用 fresh_when
, 这样可以对时效性有更好的控制。如果页面没有敏感信息,可以设置 fresh_when @product, public: true
,这会缓存在一个 public cash。(rack_cache)
这两者也可以结合使用。
需要缓存的地方:
静态页面
无变化的动态页面
动态页面片段
应用程序数据
MemCacheStore
下面这段是 rails guide 中的说明,由于这个使用较多,就单拿出来记录一下
ActiveSupport::Cache::MemCacheStore
这种存储方式使用 Danga 开发的 memcached 服务器,为程序提供一个中心化的缓存存储。Rails 默认使用附带安装的 dalli gem 实现这种存储方式。这是目前在生产环境中使用最广泛的缓存存储方式,可以提供单个缓存存储,或者共享的缓存集群,性能高,冗余度低。
初始化时要指定集群中所有 memcached 服务器的地址。如果没有指定地址,默认运行在本地主机的默认端口上,这对大型网站来说不是个好主意。
在这种缓存存储中使用 write 和 fetch 方法还可指定两个额外的选项,充分利用 memcached 的特有功能。指定 :raw 选项可以直接把没有序列化的数据传给 memcached 服务器。在这种类型的数据上可以使用 memcached 的原生操作,例如 increment 和 decrement。如果不想让 memcached 覆盖已经存在的记录,可以指定 :unless_exist 选项。
config.cache_store = :mem_cache_store, “cache-1.example.com”, “cache-2.example.com”
gem 'dalli' # Rails 默认使用附带安装的 dalli gem 实现这种存储方式
MemCacheStore 中常用的方法:
|
|