`
FZtree
  • 浏览: 109720 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Rails 中的缓存

 
阅读更多

需要缓存的

  • 全静态页面
  • 数据库密集访问 但又几乎无变化的动态页面
  • 动态页面的片段

 

 

开发环境开启缓存

/config/environments/development.rb

 

config.action_controller.perform_caching = true  

  

 

 

如果动态页面不经常更改,可以使用页面级的缓存。Page Cache AND Fragment Cache

页面和分段缓存二者均在控制器级别发生。

 

清单 1. 页面缓存 Page Cache

 

class FooController < ApplicationController
  caches_page :privacy_policy, :user_agreement 
end

 

 

清单 2. 分段缓存 Fragment Cache 【不涉及request 的动态params】

 

<% cache '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 %>

  

 

清单 3. 分段缓存 Fragment Cache 【URL标识】

 

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

  

 

页面缓存优势是速度快。缺点是伪静态,不走后台。

实际上,很多action都有before filter。如果要先身份认证才能访问页面,页面缓存不行。

动作缓存让你能够利用控制器上的任何过滤器。

 

清单 4. 动作缓存
class FoooController < ApplicationController
      caches_action :secret_page, :secret_list 
end

 

 

 

最后 cache expire

  • 缓存到期失效
  • 数据更新

 

清单 5. 基于时间的缓存到期
# -*- encoding : utf-8 -*-
class HomeController < ApplicationController
  layout "home_manage"
  skip_before_filter :verify_authenticity_token, :only => [:upload_img]

  caches_action :index, :expires_in => 1.days
  # before_filter :get_vote
end

 

清单 6. 使缓存失效
# -*- encoding : utf-8 -*-
class HomeSweeper < ActionController::Caching::Sweeper
  observe HomeRecommend, HomeKv, HomeBanner, FitLiteral, FitImage, Question, OwnerEnter,
          HomeImageLibPhoto, HomeDesignShow, HomeLifeVideo, IBanner

  def after_create(model)
    # expire_action("/index")
    expire_index
  end

  def after_update(model)
    # expire_action("/index")
    expire_index
  end

  def after_destroy(model)
    # expire_action("/index")
    expire_index
  end

  def expire_index
    cache_key = "views/#{request.host_with_port}/index"
    Rails.cache.delete(cache_key)
  end
end

 


 

参考链接:

https://www.ibm.com/developerworks/cn/web/wa-rails1/

分享到:
评论
1 楼 FZtree 2014-10-03  
ActionController::Base.expire_page(app.url_for(:controller => 'foo',
                                               :action => 'bar',
                                              nly_path => true))

相关推荐

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

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

    Ruby-RecordCache在Rails3中缓存ActiveModelRecords

    如果记录不在缓存中,RecordCache会执行数据库查询,获取记录,序列化后存储,并返回给请求者。 **RecordCache的安装与配置** 在Rails 3项目中使用RecordCache,首先需要通过Gemfile添加依赖: ```ruby gem '...

    Rails缓存架构设计

    ### Rails缓存架构设计 #### 一、高性能Web应用与缓存架构的重要意义 在现代互联网环境下,构建高性能Web应用面临着前所未有的挑战。随着用户数量的激增和技术的发展,Web应用不仅需要处理大规模且高并发的访问...

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

    从给定的文件内容中,我们可以详细解读Ruby on Rails中的几种缓存机制,并结合IBM官方网站的技术文档,理解其在实践中的应用。 首先,对于全静态页面的缓存,这通常是通过Web服务器完成的,而不是Rails本身。在...

    Rails预加载程序Spring-Rails.zip

    Spring是Rails的预加载器。Spring 能够通过保持应用运行在后台,来提升开发模式下的速度。使得不需要在执行test,rake task以及migration时每次都加载。 标签:Spring

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

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

    railsAPI

    至于性能优化,Rails提供了缓存机制,包括页面缓存、片段缓存和动作缓存,以减少服务器负载。还可以利用ActionCable实现WebSocket通信,实现实时数据传输。 最后,Rails API的应用往往需要与前端框架如React、Vue....

    rails查询学习笔记

    9. **Caching**:为了提高查询效率,Rails支持查询缓存,可以缓存特定查询的结果,避免重复执行相同的数据库操作。 10. **SQL注入防范**:Rails通过绑定参数的方式防止SQL注入,如`Model.where(id: params[:id])`,...

    rails 项目起步示例

    在Rails项目中,我们首先需要了解的是项目的目录结构。一个标准的Rails应用会包含以下关键部分: 1. **app**:应用程序的核心,包括模型(models)、视图(views)和控制器(controllers)。模型负责业务逻辑和数据...

    Rails中应用Ext.tree:以中国的省市地区三级联动选择为例

    在Ruby on Rails(Rails)框架中,开发人员经常需要实现各种用户交互功能,例如三级联动选择,这在处理如中国省市区这样的地理数据时尤其常见。这篇博客文章“Rails中应用Ext.tree:以中国的省市地区三级联动选择为...

    RAILS2.1的中文版资料

    该文档详细介绍了Rails 2.1版本中引入的新特性和改进之处,对于Rails开发者来说,是一份非常有价值的参考资料。 #### 新特性介绍 **时间区(Timezones)** Rails 2.1增加了对时区的支持,这意味着应用程序可以更...

    The Rails 4 Way

    - **Rails中的REST实现**:Rails默认遵循REST原则,通过资源路由和标准的控制器动作支持常见的CRUD操作。 - **资源和表示**:讨论如何将数据建模为资源,并如何通过不同的HTTP方法处理这些资源的不同状态。 **4. ...

    rails-memcache-dalli:在Rails应用程序中使用Dalli使用Memcache实现缓存

    默认值是曾经存储在该Rails进程的本地内存中的缓存的内存存储。 这样做的问题是,在生产中,我们经常有多个Rails实例在运行,并且每个实例都会有自己的缓存存储,这并不是对资源的充分利用。 文件存储适用于较小的...

    Advanced Rails

    书中会介绍如何通过缓存(如Action Cache和Page Cache)、数据库查询优化、资产管道优化等手段提升应用性能。 2. **复杂的路由**:Rails的路由系统允许灵活地定义资源和URL结构。高级Rails会讲解如何创建更复杂的...

    Rails Cache

    在使用缓存时,需要注意数据一致性问题,避免缓存中的过时数据导致用户看到错误信息。此外,敏感数据应加密存储,防止缓存被窃取。 10. **实际应用示例** 例如,在处理商品列表时,可以对热门商品的列表进行缓存...

    配置高可用的rails

    rails应用通常包括前端、后端、数据库以及可能的缓存机制。在rails高可用的配置中,我们会涉及以下几个关键组件: 1. 负载均衡器:负载均衡器是高可用架构中的第一道防线,它负责将外部的请求分发到多个服务器上,...

    Rails上的API:使用Rails构建REST APIAPIs on Rails: Building REST APIs with Rails

    在本篇内容中,我们将深入探讨如何利用Ruby on Rails(简称Rails)这一强大的Web应用程序框架来构建可伸缩且易于维护的RESTful API。Rails以其简洁优雅的语法、高效的开发速度以及良好的社区支持而闻名,这使得它...

Global site tag (gtag.js) - Google Analytics