快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
'gifts_index'' do %>   <h3>    Here, you can make the world a better place with a single gift. Donation gifts    are also a wonderful way to honor friends and family. Just imagine what we    can achieve together.   </h3>   <h2 class="lightBlue"><%= @event_title %></h2>   <div id="homefeatureitems">     <% for gift in @event_gifts %>      <%= render :partial => ''gifts/listable'', :locals => { :gift => gift } %>     <% end %>   </div>   ... <% end %>

在清单 7 中,cache 帮助程序标识所要缓存的分区。第一个参数是标识此缓 存分区的惟一名称。第二个参数包含代码块 — 即第一个 do 和最后一个 end 之间的代码 — 此代码块准确地确定了要缓存的 RHTML 分区。

我们的网站只有一个主页,所以命名这个页面非常 容易。在其他地方,我们使用一种特定的方法来决定此网页的 URL 以便惟一标识缓存分段。例如,当我 们为特定的内容(比如世界和平或减少贫困)而进行代码缓存时,我们需要使用清单 8 中的代码。代码 会为之寻找永久 url,也称为 permalink。

清单 8. 通过 URL 标识缓存分段

<% 

cache @cause.permalink(params[:id]) do %>

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

时间:2011-11-20 Bruce Tate

通常,当缓存单独页面时,需要用清理器使 之过期失效。有时,使用简单的基于时间的对象过期更为容易和简洁。默认地,Rails 并不提供这类机制 ,但有一种插件名为 timed_fragment_cache 可以实现这一目的。借助这个插件,我可以指定超时,可以 在缓存了的内容中指定,也可以在为此页提供了动态数据的控制器代码中指定。例如,清单 9 所示的代 码就可以为此页面构建动态数据。when_fragment_expired 方法只有在相关的缓存分段过期时才会执行。 此方法接受参数,用来指定超时的时长,它还接受一个代码块,用来指定当内容过期时哪些内容需要重建 。我也可以选择在 rhtml 页面中指定超时和缓存方法,但我更愿意使用基于控制器的方法。

清单 9. 基于时间的缓存到期

def index
 when_fragment_expired ''causes_list'', 15.minutes.from_now do
  @causes = Cause.find_all_ordered
 end
end

如果能够容忍数据稍微有些陈旧,那么使用定时的到期机制将可以极大地简化缓存策略。对 于每个被缓存的元素,只需指定想要缓存的内容、可生成动态内容的任何控制器动作以及超时。与页面缓 存类似,如果需要,也可以使用 expire_fragment :controller => controller, :action => action, :id => id 方法显式让内容到期。此方法的工作方式与缓存动作和缓存页面的到期失效是一 样的。接下来,我将介绍如何配置此后端。

Memcached

至此为止,我已经介绍了 Ruby on Rails 的页面和分段缓存模型。看过了 API 之后,现在就可以定义缓存后的数据的去处了。默认地, Rails 将把缓存后的页面放入文件系统。缓存后的页面和动作都会进入公共目录。可以配置缓存后的分段 的存储位置。为此,需要用到内存存储、文件系统(在所定义的目录)、数据库或称为 memcached 的服 务。对于 ChangingThePresent.org,我们使用 memcached。

可以将 Memcached 想象为一个大型 的 hash 图,这个图可通过网络获得。基于内存的缓存速度快,而基于网络的缓存的可伸缩性比较好。有 了插件支持,Rails 就可使用 memcached 来缓存分段和 ActiveRecord 模型。要使用它,需要安装 memcached(更多信息,请参看 参考资料)并在 environment.rb(或其他的环

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号