`

Ruby on Rails 简单页面缓存

阅读更多

三种方式 Page Caching, Action Caching和 Fragment Caching

缓存默认只在production 环境下启动

Page Caching
caches_page :public_content
以URL为准
expire_page :action =>"public_content"

Action Caching
caches_action :premium_content
以URL为准
 expire_action :action => "premium_content", :id => article
 Page Caching 和 Action Caching的实例:
class ContentController < ApplicationController
 before_filter :verify_premium_user, :except => :public_content
 caches_page :public_content
 caches_action :premium_content
 cache_sweeper :article_sweeper,
        :only => [ :create_article,
        :update_article,
        :delete_article ]
 def public_content
  @articles = Article.list_public
 end
 def premium_content
  @articles = Article.list_premium
 end
 private
 def verify_premium_user
  return
   user = session[:user_id]
   user = User.find(user)
  if user
   unless user && user.active?
   redirect_to :controller =>  "login", :action => "signup_new"
  end
 end
end

删除过期缓存内容:
app/models中加article_sweeper.rb
class ArticleSweeper < ActionController::Caching::Sweeper
 observe Article
 def after_create(article)
  expire_public_page
 end
 def after_update(article)
  expire_article_page(article.id)
 end
 def after_destroy(article)
  expire_public_page
  expire_article_page(article.id)
 end
 private
 def expire_public_page
  expire_page(:controller => "content", :action => 'public_content')
 end
 def expire_article_page(article_id)
  expire_action(:controller =>  "content",
        :action => "premium_content",
        :id => article_id)
 end
end
app/public/content/show/1默认caches_page文件路径
app/public/content/show/1.html


Fragment Caching
controller:
class Blog1Controller < ApplicationController
 def list
  @dynamic_content = Time.now.to_s
  unless read_fragment(:action => 'list')
   logger.info("Creating fragment")
   @articles = Article.find_recent
  end
 end
end
#read_fragment()查看一个action的fragment缓存是否存在
view:
<%= @dynamic_content %> <!-- 动态内容 -->
<% cache do %> <!-- 缓存开始-->
 <ul>
 <% for article in @articles -%>
  <li><p><%= h(article.body) %></p></li>
 <% end -%>
 </ul>
<% end %> <!-- 结束缓存 -->
<%= @dynamic_content %> <!-- 其它动态内容 -->

使用多个缓存段:
<% cache(:action => 'list', :part => 'articles') do %>
 <ul>
 <% for article in @articles -%>
  <li><p><%= h(article.body) %></p></li>
 <% end -%>
 </ul>
<% end %>
<% cache(:action => 'list', :part => 'counts') do %>
 <p>There are a total of <%= @article_count %> articles.</p>
<% end %>
#使用:part参数区分同一action下的不同缓存段

缓存过期
controller:
class Blog2Controller < ApplicationController
 def list
  @dynamic_content = Time.now.to_s
  @articles = Article.find_recent
  @article_count = @articles.size
 end
 def edit
  # 编辑文章时不更新统计缓存
  expire_fragment(:action => 'list', :part => 'articles')
  redirect_to(:action => 'list')
 end
 def delete
  #删除文章时同时删除两个缓存
  expire_fragment(:action => 'list', :part => 'articles')
  expire_fragment(:action => 'list', :part => 'counts')
  redirect_to(:action => 'list')
 end
end

expire_fragment()可接正则表达式
expire_fragment(%r{/blog2/list. })

Fragment Caching存储选项设置:
ActionController::Base.fragment_cache_store = <下面的选项之一>
ActionController::Caching::Fragments::FileStore.new(path)
ActionController::Caching::Fragments::DRbStore.new(url)
ActionController::Caching::Fragments::MemCachedStore.new(host)

分享到:
评论

相关推荐

    举例理解Ruby on Rails的页面缓存机制

    在 Ruby on Rails 中,页面缓存是一种优化性能的技术,尤其适用于那些内容相对静态或者对用户个性化要求不高的网页。页面缓存的工作原理是将动态生成的 HTML 页面直接保存到服务器的文件系统中,后续的相同请求可以...

    ruby on rails 101

    ### Ruby on Rails 101:深入理解与实践 #### 引言 《Ruby on Rails 101》是一本介绍Ruby on Rails(简称RoR或ROR)的基础书籍,旨在为初学者提供一个全面而深入的学习框架。本书由Peter Marklund编写,包含了五天...

    ruby on rails在线考试系统

    Ruby on Rails(简称Rails)是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web开发过程并提高效率。在这个“ruby on rails在线考试系统”中,我们可以探讨以下几...

    提升Ruby on Rails性能的几个解决方案

    Ruby On Rails 框架自它提出之日起就受到广泛关注,在“不要重复自己”,“约定优于配置”等思想的指导下,Rails 带给 Web 开发者的是极高的开发效率。 ActiveRecord 的灵活让你再也不用配置繁琐的 Hibernate 即可...

    ruby on rails 书全集(10余本经典著作PDF版)

    Ruby on Rails,简称Rails,是基于Ruby编程语言的一个开源Web应用程序框架,以其“约定优于配置”(Convention over Configuration)的设计哲学和“模型-视图-控制器”(MVC)架构模式,深受开发者喜爱。这套书全集...

    ruby on rails 学习资料

    Ruby on Rails,简称Rails,是一种基于Ruby编程语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和代码的可读性。Rails的核心理念是“DRY”(Don't Repeat Yourself),强调...

    ruby on rails 实践

    Ruby on Rails是一种流行的开源网站开发框架,它利用Ruby语言,遵循MVC(模型-视图-控制器)设计原则,用于快速开发数据库驱动的动态网站。本书《Ruby on Rails 实践》是一本指南,旨在向读者介绍Ruby on Rails框架...

    深入理解Ruby on Rails中的缓存机制

    我将显示站点中几个需要缓存的地方。然后,再指出我们为其中每个地方所做出的选择以及为实现这些页面所使用的代码或策略。尤其会重点讨论如下内容: 全静态页面 几乎无变化的全动态的页面 动态页面片段 应用程序...

    Ruby on Rails:Rails性能优化与缓存策略.docx

    Ruby on Rails:Rails性能优化与缓存策略.docx

    Ruby.on.Rails.Enterprise.Application.Development

    ### Ruby on Rails企业应用开发详解 #### 一、引言 《Ruby on Rails Enterprise Application Development》这本书由Elliot Smith和Rob Nichols共同编写,由Packt Publishing出版。该书旨在为读者提供一个完整的...

    ruby on rails 教程

    **标题解析:**“ruby on rails 教程”直指文档内容旨在教授Ruby on Rails框架的基础知识和应用技巧,Ruby on Rails(RoR)是一种用于Web开发的开源框架,基于Ruby语言,它遵循MVC(模型-视图-控制器)架构模式,...

    Ruby on Rails 入门经典教程

    《Ruby on Rails 入门经典教程》是一本旨在引导初学者轻松掌握Ruby on Rails框架的教程。Ruby on Rails,简称ROR,是基于Ruby语言的一个开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,以其简洁、...

    中文版的Ruby On Rails实践(PDF)

    Ruby on Rails,简称Rails,是由David Heinemeier Hansson基于Ruby语言开发的一个开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web应用开发过程,提高开发效率。这个中文版的《Ruby ...

    基于Ruby语言的Ruby on Rails项目及其代码方案

    本项目展示了如何使用Ruby on Rails框架构建一个简单的Web应用。通过创建模型、控制器、视图以及配置路由,实现了用户数据的基本CRUD操作。这不仅是一个基础的学习案例,也是进一步深入学习Ruby on Rails框架的良好...

    ruby on rails 2.1 what is new (CN)

    Rails 2.1在缓存方面进行了重大改进,提供了更多的缓存策略和选项,包括页面缓存、动作缓存和片段缓存等。这些改进有助于提高应用性能,尤其是在高流量的情况下。 #### 更新Ruby on Rails 更新Rails版本同样简单,...

    Ruby On rails依赖的目录树

    根据提供的标题、描述以及部分内容,我们可以清晰地了解到这段文本记录了一次安装Ruby on Rails及其相关依赖库的过程。基于这些信息,我们将深入探讨Ruby on Rails框架的依赖结构,并解释每个依赖库的功能及其在...

    Ruby on Rails 学习案例

    Ruby on Rails,简称Rails,是基于Ruby编程语言的一个开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和代码的可读性。本学习案例将带你深入理解Rails的核心概念和技术,帮助你成为...

Global site tag (gtag.js) - Google Analytics