`

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

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

    主要介绍了举例理解Ruby on Rails的页面缓存机制,本文来自于IBM官方网站技术文档,需要的朋友可以参考下

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

    主要介绍了深入理解Ruby on Rails中的缓存机制,本文来自于IBM官方网站技术文档,需要的朋友可以参考下

    redis-rails:Ruby on Rails的Redis存储

    Ruby on Rails的Redis商店 redis-rails为Ruby on Rails提供了一整套存储(缓存,会话, HTTP缓存)。 有关一般准则,请参见主要的。 关于Rails 5.2的快速说明 Rails 5.2.0用地,因此,如果您只需要将片段缓存存储在...

    rails-docker-compose:Ruby on Rails的Docker开发环境

    使用Docker开发Ruby on Rails的配置文件 docker-compose up 利润! 你得到什么 一线开发环境的设置和启动: docker-compose up 。 一个易于安装的依赖关系可在新计算机上进行编码:Docker。 (与使用Vagrant时的两...

    RailsTutorial:迈克尔·哈特(Michael Hartl)的《 Ruby on Rails教程》

    自述文件 ... Ruby版本 系统依赖 配置 数据库创建 数据库初始化 如何运行测试套件 服务(作业队列,缓存服务器,搜索引擎等) 部署说明 … 如果您不打算运行rake doc:app请随意使用其他标记语言。

    Rails-Blog:一个用Ruby on Rails编写的简单Weblog应用程序

    Rails博客这是一个用Ruby on Rails编写的简单Weblog应用程序。这个项目的目的是让我学习一些基本的Web开发原理,以及学习如何使用Ruby语言和Rails框架。它所基于的教程可以在找到。该自述文件通常会记录启动和运行...

    archdragon2_rails:用 Ruby on Rails 编写的基于浏览器的游戏

    自述 此自述文件通常会记录... Ruby版 系统依赖 配置 数据库创建 数据库初始化 如何运行测试套件 服务(作业队列、缓存服务器、搜索引擎等) 部署说明 … 如果您不打算运行rake doc:app请随意使用不同的标记语言。

    coding-snippets:编写代码片段 Ruby on Rails 项目

    自述 此自述文件通常会记录... Ruby版 系统依赖 配置 数据库创建 数据库初始化 如何运行测试套件 服务(作业队列、缓存服务器、搜索引擎等) 部署说明 … 如果您不打算运行rake doc:app请随意使用不同的标记语言。

    webbit_app_on_ror:Ruby on Rails框架Ruby on Rails上的第一个项目

    自述文件 该自述文件通常会记录启动和运行应用程序所需的所有步骤。... Ruby版本 系统依赖 配置 数据库创建 数据库初始化 如何运行测试套件 服务(作业队列,缓存服务器,搜索引擎等) 部署说明 ...

    contentful-api-integration:内容丰富的API集成展示(Ruby on Rails)

    这是使用与Ruby on Rails进行ContentContent API集成的示例。 特征: 内容丰富的API集成 100%的测试覆盖率 100%灯塔评分(可访问性和SEO) 每个配方的页面标题 在生产中使用Redis进行缓存 在本地运行 确保已...

    cheduled_tweets:Ruby on Rails应用程序-克隆到缓冲应用程序,使用高音帐户在特定时间发布tweet

    初始应用程序使用ruby on rails,为缓冲区创建一个克隆,我们可以在其中创建,连接我们的Twitter帐户并计划在特定时间发布的推文 该自述文件通常会记录启动和运行应用程序所需的所有步骤。 您可能要讲的内容: ...

    first_app:Ruby on Rails 教程的第一个应用程序

    Ruby on Rails 教程:第一个应用程序 这是 Ruby on Rails 教程的第一个应用程序 此自述文件通常会记录启动和运行应用程序所需的任何步骤。 您可能想要涵盖的内容: Ruby版 系统依赖 配置 数据库创建 数据库初始化 ...

    blackchestnut.github.io:关于Ruby on Rails,React Native,PostgreSQL等的开发人员说明

    Ruby on Rails 资产 Rails 5中的自定义字体 快取 在测试中禁用缓存 装饰工 Disposable :: Twin中的JSON字段 弹性搜索 耐嚼 文件附件工具 神社 神社直接上传到s3 神社直接上传到s3(has_many) 记录中 在...

    RoR_API_TDD:Udemy的REST API与Ruby on Rails课程

    带有TDD的Rails API Udemy的课程带有Ruby on Rails的REST API 您可能要讲的内容: Ruby版本:2.7.0 Rails版本:5.2.4.4 组态 数据库创建 数据库初始化 测试套件:Rspec 服务(作业队列,缓存服务器,搜索引擎等...

    devenv:使用 Vagrant 构建并使用 Chef 配置的 Ruby on Rails 开发环境

    开发环境使用 Vagrant 构建并使用 Chef 配置的 Ruby/Rails 开发环境。 厨师食谱使用 Berkshelf 进行管理。 Box 用于开发示例。 如果您对该 VM 的准备方式感兴趣,请查看原始文章概述分配了 2GB 的 RAM Ruby 2.1.0 + ...

    rails-demo:Ruby on Rails演示

    自述文件该自述文件通常会记录启动和运行应用程序所需的所有步骤。 您可能要讲的内容: Ruby版本系统依赖配置数据库创建数据库初始化如何运行测试套件服务(作业队列,缓存服务器,搜索引擎等) 部署说明...轨道演示

    Devcamp-Portfolio:我的Ruby on Rails 5课程

    创建此仓库是为了记录我在“剖析Ruby on Rails 5”课程中的进度。 该自述文件通常会记录启动和运行应用程序所需的所有步骤。 您可能要讲的内容: Ruby版本 系统依赖 配置 数据库创建 数据库初始化 如何运行测试...

Global site tag (gtag.js) - Google Analytics