`
Hooopo
  • 浏览: 335308 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

rails cache sweeper妙用

    博客分类:
  • Ruby
阅读更多
webgame中的任务系统简单的描述就是这样的需求:
1.一个角色身上携带各种任务(任务获得渠道很多,系统分配获得,主动接取获得等)
2.角色的任何操作都有可能完成身上携带的某个任务

一个简单的种植小麦任务:
这个任务过程是这样的:如果一个角色身上携带一个种植小麦的任务,当他在执行种植小麦的操作时,把种植小麦这个任务标记成完成状态。

常规方式实现:
class PlantController < ApplicationController
  def wheat
    #此处省略种植操作....
    if 种植小麦成功
      task = current_role.tasks.find_by_tag("plant_wheat")
      task.update_attributes :status => "completed" if task
      render "plant ok"
    else
      render "plant fail"
    end
  end
end

这种方式简单,直观。
但是随着任务的增多,操作的增加,本来就已经很复杂的业务逻辑里面再掺杂着这样的任务判定与更新逻辑在里面就很难维护了。


幸好,rails有cache sweeper这东东。。!
cache sweeper本来的用途是集中处理缓存失效逻辑的,就像上面说的,缓存失效逻辑如果分散在各个action不便于管理和维护。。

任务与缓存失效都有着这样一个共通点:缓存失效与任务触发都是由action的执行与model的更改造成的。

监视action的执行rails里有各种filter
监视model的改变rails里有observer
但是这两个任意一个也解决不了上面的问题~

而cache sweeper正是把两者接合起来的一个东西:

引用
Sweepers are the terminators of the caching world and responsible for expiring caches when model objects change.
They do this by being half-observers, half-filters and implementing callbacks for both roles.


利用cache sweeper的falf-ovserver half-filter的特性,完成上面需求:

#app/task_monitors/plant_contract_monitor.rb
class PlantContractMonitor < ActionController::Caching::Sweeper
  observe PlantContract
	
  def after_save(record)
    if current_role
      if record.name == "小麦"
        task = current_role.tasks.find_by_tag("plant_wheat")
        task.update_attributes :status => "completed" if task
      end
    end
  end
end


种植小麦action只需开头加一句:
cache_sweeper :plant_contract_monitor, :only => [:wheat]


分享到:
评论

相关推荐

    Rails Cache

    **Rails Cache 深度解析** Rails Cache 是 Ruby on Rails 框架中的一个核心特性,用于提升Web应用的性能,通过缓存数据减少数据库查询,从而加快页面加载速度。在高并发环境下,缓存机制显得尤为重要,因为它能显著...

    Rails101_by_rails4.0

    《Rails101_by_rails4.0》是一本专注于Rails 4.0.0版本和Ruby 2.0.0版本的自学教程书籍,它定位于中文读者,旨在成为学习Rails框架的参考教材。Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它...

    Rails项目源代码

    Ruby on Rails,通常简称为Rails,是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式。这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何...

    Advanced Rails

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

    关于rails 3.1 cucumber-rails 1.2.0

    Rails 3.1 和 Cucumber-Rails 1.2.0 是两个在Web开发领域非常重要的工具,尤其对于Ruby on Rails框架的测试和自动化流程。本文将深入探讨这两个组件,以及它们如何协同工作来增强软件开发的效率和质量。 首先,...

    Rails

    2. **Active Record**:这是Rails中的ORM(对象关系映射)库,它允许开发者用Ruby代码操作数据库,无需编写SQL语句。 3. **Action Controller**:负责处理HTTP请求并调用模型来执行业务逻辑,然后将结果传递给视图...

    rails2-sample

    从给定的文件信息来看,我们正在探讨的是一本关于Ruby on Rails的书籍,书名为《Simply Rails2》,作者是Patrick Lenz。本书旨在为初学者提供深入理解Ruby on Rails框架的指南,从基础概念到高级主题均有涵盖,是...

    rails-cache-inspector:用于片段缓存的可视化调试的简单工具

    安装将此行添加到应用程序的Gemfile中: gem 'rails-cache-inspector' , group : :development用法配置突出显示 # config/initializers/rails_cache_inspector.rbRailsCacheInspector . configuration . highlight_...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    ### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:...

    rails指南 中文版

    Rails指南中文版是针对Ruby on Rails框架的一份详尽教程,旨在帮助开发者深入理解并熟练掌握这个强大的Web应用开发工具。Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-...

    使用Aptana+Rails开发Rails Web应用(中文)

    在开发Web应用时,Ruby on Rails(简称Rails)框架因其高效、简洁的代码风格和强大的社区支持而备受青睐。Aptana是一款强大的集成开发环境(IDE),尤其适用于Rails项目的开发,它提供了丰富的特性来提升开发效率。...

    Ruby on Rails安装指南(Ruby 1.8.6+Rails 2.0.2)

    Ruby on Rails 安装指南 Ruby on Rails 安装指南是指安装 Ruby 1.8.6 和 Rails 2.0.2 的详细步骤。首先,需要下载 Ruby One-Click Installer 版本,并安装 Ruby。然后,下载 Rails 2.0.2 版本,并安装。接下来,...

    Rails recipes

    Ruby on Rails是一种流行的开源Web应用框架,用Ruby语言编写,遵循MVC架构模式。Rails的目的是让开发过程尽可能简洁和高效,因此它内置了许多自动化功能,使得开发者能够迅速地从零开始构建应用程序。Rails Recipes...

    rails 2.3.2离线安装rails 2.3.2离线安装

    rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails ...

    [Rails] Crafting Rails Applications (英文版)

    [Pragmatic Bookshelf] Crafting Rails Applications Expert Practices for Everyday Rails Development (E-Book) ☆ 图书概要:☆ Rails 3 is a huge step forward. You can now easily extend the framework, ...

    rails敏捷开发的购物车系统

    在本文中,我们将深入探讨如何使用Rails敏捷开发技术构建一个购物车系统,特别是在参考《rails敏捷开发第四版》中的示例。Rails 3.2.6是本文的基础框架,它是一个强大的Ruby Web应用程序框架,以其MVC(模型-视图-...

    Ruby on Rails入门例子

    2. 创建资源:使用`rails generate controller Posts`生成控制器,再用`rails generate scaffold Post title:string content:text`生成模型和相关的控制器、视图及路由。 3. 迁移数据库:编写迁移文件,更新数据库表...

Global site tag (gtag.js) - Google Analytics