快速业务通道

真实世界中的Rails: Rails中的缓存 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
直接在图像的本地缓存中提供图像服务,然后再向我们发送请求。由于 Panther 服务 并不知道我们何时会更改图像,所以我们使用 HTTP 报头来使其到期失效,如下所示:

真实世界中的Rails: Rails中的缓存(3)

时间:2011-11-20 Bruce Tate

HTTP 缓存 失效报头

HTTP/1.1 200 OK
Cache-Control: max-age=86400, must-revalidate
Expires: Tues, 17 Apr 2007 11:43:51 GMT
Last-Modified: Mon, 16 Apr 2007 11:43:51 GMT

注意这些不是 HTML 报头。它们与 Web 页面 内容独立构建。Web 服务器将负责构建这些 HTTP 报头。像这样一篇有关 Rails 的文章系列若详细介绍 Web 服务器配置,未免有点偏题,所以我将直接切入可用 Rails 框架进行控制的缓存内容这一主题(有 关 Web 服务器配置的更多内容,请参见 参考资料 中的相关链接)。

页面缓存

如果动态页面不经常更改,可以使用页面级的缓存。比如,Blog 和公告牌使用的就 是这种缓存。通过页面缓存,Rails 就可以用来构建动态 HTML 页,并将此页存储在公共目录,这样,应 用程序服务器就可以像服务其他静态页面一样来服务这个动态页。

如果页面已经被缓存,那么就 不需要引入 Rails,页面缓存是 Rails 内速度最快的一种缓存。在最底层,页面缓存实际上在 Rails 中 非常容易实现。页面和分段缓存二者均在控制器级别发生。您需要告知 Rails 如下内容:

想要缓 存哪些页面?

当页面内容更改时,您如何能在缓存中让该页面到期失效?

可以通过在控制 器类中使用 caches_page 指令来启用页面缓存。例如,若要在 about_us_controller 缓存 privacy_policy 和 user_agreement 页面,可以输入如下代码:

清单 2. 启用页面缓存

class AboutController < ApplicationController
 caches_page :privacy_policy, :user_agreement
end

让页面到期失效则可以通过 expire_page 指令来实现。若要在 Rails 调用 new_pages 动 作时使上述页面到期失效,可以使用如下代码:

清单 3. 使页面失效

class 

AboutController < ApplicationController
 caches_page :privacy_policy, :user_agreement
 
 def new_pages
  expire_page :action => :privacy_policy
  expire_page :action => :user_agreement
 end
 
end

真实世界中的Rails: Rails中的缓存(4)

时间:2011-11-20 Bruce Tate

另外,有几个小问题需要注意,比如 URL。URL 不能依赖于 URL 参数。例如,应该使用 gifts/water/1 而非 gifts/water?page=1。在 routes.rb 中使用这类 URL 将非常容易。比如,我们的 页面中总是有一个选项卡参数用来显示哪个选项卡被当前选中。若要将此选项卡作为 URL 的一部分,我 们会有如下的路由规则:

清单 4. 选项卡的路由规则

map.connect 

''member/:id/:tab'', :controller => ''profiles'', :action => 

''show''

对于具有页面参数的那些列表以及依赖于 URL 参数的其他页面,也需要采用相 同的做法。此外,还需要考虑安全性问题。

如果页面已经在缓存内,那么就不会用到 Rails 框架 ,服务器并不能为您管理安全性。Web 服务器将更乐于在缓存内呈现任何页面,而不管用户是否对其拥有 查看的权限。所以,如果您很关心页面可由谁查看,那么就不要使用页面缓存。

如果只是想缓存 简单的静态页面,那么了解上述内容就应该足够了。只要内容简单,实现起来就不难。

当想要缓 存更为复杂的内容时,就需要进行一些权衡取舍了。由于想要缓存的页面高度动态,所以到期失效逻辑就 会变得更加复杂。要处理复杂的到期失效逻辑,将需要编写和配置定制清理器(sweeper)。在某些控制 器击发时,这些类会从缓存内删除选定的元素。

多数定制清理器都会观察某些模型对象,

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号