专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Ruby教程 » rails:真实世界中的 Rails: Rails 中的缓存Cache »正文

rails:真实世界中的 Rails: Rails 中的缓存Cache

来源: 发布时间:星期四, 2009年1月8日 浏览:35次 评论:0
  有关本系列

  Rails 在开发人员中享有盛誉Rails 度备受瞩目是业界争论焦点人们对它评价也大相径庭:从种高生产率技术到个小玩意从市场定位准确到宣传过度和很多新技术Rails 也被毫无例外地被打上了 “未经验证、可扩展性有限” 标记和 C 和 Java™ 语言区别Ruby 是解释性且存在性能上些固有阻碍

  实际上Internet 上许多大型网站WebSite都使用是解释性语言这些网站WebSite均引入了类似 Ruby 所采用相同策略:即集群式无共享架构此外缓存Cache也是必需要获得尽可能好性能许多站点都需要采用种有效缓存Cache策略Rails 开发人员也开始跟随其后

  几个场景

  首先让我先来带您浏览几个 ChangingThePresent.org 中页面吧我将显示站点中几个需要缓存Cache地方然后再指出我们为其中每个地方所做出选择以及为实现这些页面所使用代码或策略尤其会重点讨论如下内容:

  全静态页面

  几乎无变化全动态页面

  动态页面片段

  应用数据

  先来看看静态页面几乎每个站点都会有静态页面如图 1 所示其中还有我们条款和条件可以通过单击 register 然后再选择是否接受用户协议来浏览相应页面对于 ChangingThePresent 而言我们从此页中删除了所有动态内容以便 Apache 能够对它进行缓存Cache按照我们 Apache 中配置规则这些内容永远都不会由 Rails 服务器生成因此我根本无需对其考虑 Rails 缓存Cache

  图 1. 用户协议

接下来行将准备缓存Cache选项注意这里诸多选项是为了让您可以获得更多调试数据、禁用缓存Cache和定义该缓存Cache名称空间在 参考资料 部分给出 memcached 站点可以找到有关配置选项更多信息

  模型缓存Cache

  我们使用最后种缓存Cache是基于模型缓存Cache我们使用是称为 CachedModel 缓存Cache插件种定制版本模型缓存Cache实际上是种有限形式数据库缓存Cache缓存Cache很容易按模型启用

  要想让模型使用缓存Cache解决方案只需扩展 CachedModel 类而非扩展 ActiveRecord如清单 11 所示 CachedModel 扩展 ActiveRecord::BaseActiveRecord 并非全对象关系型映射层此框架极大地依赖于 SQL 来执行复杂特性而且如果需要用户可以很容易降至 SQL直接使用 SQL 会使缓存Cache出问题缓存Cache层必须处理完整结果集而不是单独个数据库行处理完整结果集常常会问题不断而且如果没有支持应用深层逻辑这几乎不太可能正由于这个原因CachedModel 焦点才会放到缓存Cache单个模型对象上并只加速返回单行结果查询

  清单 11. 使用 CachedModel

Class Cause < CachedModel

  大多数 Rails 应用都会重复访问多个条目例如用户对象模型缓存Cache在很多情况下都可以明显地使速度加快对于 ChangingThePresent我们刚刚开始加速基于模型缓存Cache

  结束语

  Ruby 虽然是门生产率极高语言但若从性能角度考虑该语言解释性特性让它并不那么理想大多数主要 Rails 应用都将会通过有效利用缓存Cache来弥补某些不足对于 ChangingThePresent.org我们主要使用分段缓存Cache并通过控制器使用基于时间思路方法来使缓存Cache分段到期失效这种方式很适合我们网站WebSite即使其中有些页面会基于登录进来用户有所变化



  我们还研究了使用受 memcached 支撑 CachedModel 类所能带来影响虽然我们研究还仅限于缓存Cache对数据库性能所造成影响但早期结果还是很有希望在 下篇 文章中我将介绍些实用窍门技巧您可以使用这些窍门技巧来为另个真实世界中 Rails 举例进行数据库优化



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: