`
jbf034
  • 浏览: 152331 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Sweeper实例

阅读更多
expir_xxx 方法会工作的很好,但是在你的“控制器”中它们也要与缓存功能的代码合
作。每次你修改数据库内的一些东西时,你也必须对它可能影响到的被缓存页做些工作。在
应用程序较小时这很容易,但应用程序快速增长时这就会变得很困难。在一个“控制器”内
的修改可能会影响到另一个“控制器”中被缓存的页。“帮助方法”内的商业逻辑,其实不
应该知道有关HTML 页的信息,现在需要担心的是失效被缓存的页。
幸运地,Rails 可以使用sweeper 来简化一些这样的耦合。Sweeper 是你的“模型”对象
上的一个指定“观察者”。当在“模型”内有重要事情发生时,sweeper 会失效依赖于此“模型”数据的被缓存的页。你的应用程序可以根据需要许多sweeper。典型地你会创建一个单独的sweeper 来管理每个“控制器”的缓存。在app/models 目录内放置你的sweeper 代码。

class ArticleSweeper < ActionController::Caching::Sweeper
observe Article

# If we create a new article, the public list
# of articles must be regenerated

def after_create(article)
expire_public_page
end

# If we update an existing article, the cached version
# of that particular article becomes stale

def after_update(article)
expire_article_page(article.id)
end

# Deleting a page means we update the public list
# and blow away the cached article

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
sweeper 的工作流程有点费解。

1、sweeper 在一个或多个“活动记录”类上被定义为一个“观察者”。在这个例子中,
它观察Article“模型”(我们在270 页谈论它)。sweeper 使用“钩子”方法来适当地失效被缓存的页。

2、sweeper 也被在一个“控制器”中像下面一样被声明为活跃的。
cache_sweeper directive.
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 ]
# ...

3、如果请求来自sweeper 过滤的“动作”中的一个的调用,则sweeper 被激活。如果任
何一个“活动记录”观察者方法被激活,则页和“动作”失效方法将被调用。如果“活动记
录”观察者得到调用,但是当前“动作”没有被选择为一个缓存的sweeper,则sweeper 内
的失效调用被忽略。否则失效有效。

实例
sweeper插件用于自动生成清扫缓存的sweeper类,监视特定的model,根据相应的事件触发其行动,下面是一个example:

1. 首先生成项目和初始数据:
$ rails test_sweeper
$ cd test_sweeper
$ script/generate scaffold post title:string body:text

[/color]
#db/migrate/001_create_posts.rb
(1..50).each do |num|
  Post.create(:title => "test#{num}", :body => "Test#{num}")
end

$ rake db:migrate

2. 安装插件:
$ script/plugin install http://topfunky.net/svn/plugins/sweeper

3. 生成Sweeper类,该类在model增删改之后将缓存页面清除:
$ script/generate sweeper post after_save before_destroy

[color=red]

#app/models/post_sweeper.rb
class PostSweeper < ActionController::Caching::Sweeper
  observe Post
  def after_save(record)
    expire_page :controller => 'posts', :action => 'index'  
  end
  def before_destroy(record)
    expire_page :controller => 'posts', :action => 'index'  
  end
end


4. 在controller中指定缓存页面和sweeper类:
[color=red][/color]
#app/controller/posts_controller.rb
caches_page :index
cache_sweeper :post_sweeper


5. 察看效果:
当第一次访问/posts时,server会查询数据库,render页面,并生成cache page:
Cached page: /posts.html (0.00737)
之后再访问/posts时,server就不会再去查询数据库,render页面,而直接去读cache page
直到我们对post做了增删改中任意一个操作,server会删除被cache的page:
Expired page: /posts.html (0.00014)
然后再访问/posts时,server又会去查询数据库,render页面,并生成cache page
分享到:
评论

相关推荐

    Driver.Sweeper.v0.90.CHS 汉化版 卸载驱动专用

    Driver.Sweeper.v0.90.CHS 是一个专门针对驱动程序卸载的汉化工具,尤其适合处理那些常规方法难以卸载的驱动。这款工具以其强大和高效的功能,在IT领域中受到了用户的广泛欢迎,尤其是对于需要频繁安装和卸载驱动的...

    驱动卸载工具Driver Sweeper v1.5.0

    驱动卸载工具Driver Sweeper v1.5.0 Driver Sweeper是Guru3D网站开发的一款驱动程序卸载工具,可以彻底清除系统内残留的一些旧驱动,非常适合升级驱动或更换硬件的情况。Driver Sweeper目前支持Ageia Physx物理卡、...

    Driver Sweeper v2.60 多语版

    Driver Sweeper是Driver Cleaner的继任者。同样是一款非常实用的驱动程序清理工具,主要用来清理不能够被完全卸载的驱动文件,降低了更新不同版本驱动对系统造成的不稳定性。目前它可以支持NVIDIA、NVIDIAChipset、...

    Data Sweeper Pro v3.2.zip

    Data Sweeper一款能完全销毁数据软件,防止资料泄露,储存在硬盘上的数据是不能简单的销毁的,即使你对硬盘格式化,数据本身仍是残留在硬盘上的。Data Sweeper就能帮您完全销毁这些顽固的数据。

    完美驱动卸载Driver Sweeper

    Driver Sweeper是一款专业的驱动程序清理工具,主要用于帮助用户卸载并清理系统中的多余或无用驱动程序,以保持系统的高效运行和整洁。在Windows操作系统中,驱动程序是硬件设备与操作系统之间的桥梁,它们使得硬件...

    mine sweeper.mp4

    mine sweeper演示视频

    mine_sweeper.zip_android_android minesweep_mine sweeper java_min

    这个“mine_sweeper.zip”压缩包包含了构建Android版扫雷游戏的所有源代码,为开发者提供了一个深入理解Android应用开发和游戏逻辑实现的实例。 首先,让我们探讨一下Android开发的基础。Android是一个基于Linux的...

    driver sweeper

    专业强效移除显卡驱动,amd,nvida。方便快捷,免安装。卡巴到此取经。

    Tune Sweeper For Mac_v4.24.0

    【Tune Sweeper for Mac_v4.24.0】是一款专为苹果Mac操作系统设计的高效音乐管理软件,它的主要功能在于帮助用户整理并优化他们的iTunes音乐库,确保音乐收藏的整洁与有序。该软件的最新版本4.24.0提供了更强大的...

    SWEEPER.EXE

    一个小巧windows系统垃圾清除器 &lt;br&gt;*可以设定开关机处理垃圾 *有深度处理功能 *全自动 *安全高效率 *是写代码人氏的最好帮手

    Webroot Spy Sweeper vv5.5.7.122

    软件介绍 高效而独立的进行检测、移除、阻挡这些间谍软件的工具,它通过经常更新的包含数千间谍软件资料的数据库全面扫描你的计算机,扫描出的间谍/广告软件马上被隔离并被中止,以便你删除他们,同时恢复正常程序...

    new_sweeper.rar

    2. **单例模式**:用于确保游戏中只有一个实例,如游戏板对象,避免多实例冲突。 六、调试与测试 1. **单元测试**:编写测试用例验证各个功能模块的正确性,如雷的生成、单元格状态的转换等。 2. **集成测试**:...

    Driver Sweeper

    Driver Sweeper是Driver Cleaner的继任者。同样是一款非常实用的驱动程序清理工具,主要用来清理不能够被完全卸载的驱动文件,降低了更新不同版本驱动对系统造成的不稳定性。目前它可以支持NVIDIA、NVIDIAChipset、...

    History Sweeper v3.22

    History Sweeper 是一个可以清除你计算机中无用文件和历史记录的一个非常小巧的软件,如注册表无用项,文档、运行、查找记录。清理的非常快速、安全。

    Mine_Sweeper.zip_Mine!

    Mine Sweeper in C programming.

    代码 unity3d 游戏源码 Star Sweeper 太空星际战斗项目 源程序 手机

    代码 unity3d 游戏源码 Star Sweeper 太空星际战斗项目 源程序 手机代码 unity3d 游戏源码 Star Sweeper 太空星际战斗项目 源程序 手机代码 unity3d 游戏源码 Star Sweeper 太空星际战斗项目 源程序 手机代码 unity...

    Driver Sweeper (驱动程序清理工具) V2.5.0 多国语言版

    Driver Sweeper (驱动程序清理工具) V2.5.0 多国语言版 软件大小: 4.7 MB 软件语言: 多国语言[中文] 软件性质: 国外软件 软件授权: 免费软件 应用平台: Win7 / Vista / Win2003 / WinXP 软件MD5: D8AF5F...

    033 The Shepherdess and the Chimney Sweeper.doc

    033 The Shepherdess and the Chimney Sweeper.doc

    小学英语英语故事童话故事TheShepherdessandtheChimney_Sweeper

    小学英语英语故事童话故事TheShepherdessandtheChimney_Sweeper

Global site tag (gtag.js) - Google Analytics