搞过Java的应该都晓得,经常会定义一些字典,然后将这些字典缓存带内存中以提高查询的效率和速度,也就是常说的缓存,有人叫码表.
今天看看如何在Rails中实现类似的功能,思路是一样的,可以缓存在数组或者Hash里面,这里为了查找方便,我们选择使用Hash.
也就是:如何创建一个变量从rails开始运行时初始化,一直维持到rails终止,而且对于每一个request都能共享的变量?
1,
首先在environment.rb
里面(如果您使用的Rails2以上版本,建议放在initializers
目录里面,自己创建一个文件即可)定义一个ruby中的全局变量即可,例如$actions_in_mem
在ruby里面,以$
开头的变量即自动申明为全局变量)。在rails启动的时候,执行在environment.rb和initializers里面的文件,初始化$actions_in_mem
,这样$actions_in_mem
即可持续使用了,如:
Ruby代码
-
$actions_in_mem
=
Hash
.
new
2,
然后在controller或者model或者view里面都是可用的了,比如在model里面实现刷新:
Ruby代码
-
-
def
Action.refresh
-
Action.get_actions(1).each
do
|ac|
-
put_into_hash(ac.controller+"_"
+ac.action,ac.id)
-
end
-
end
-
-
def
Action.put_into_hash(key,value)
-
$actions_in_mem
.store(key, value)
-
logger.info("@@actions_in_mem.size=#{$actions_in_mem.size}---#{key}=>#{value}"
)
-
end
3,
当然,你可以在controller中定义一个方法手工刷新这个全局变量,或者定时刷新即可,如下代码实现手工刷新.
Ruby代码
-
-
def
refresh_actions
-
Action.refresh
-
end
4,
最后是在view里面显示或者维护,如下代码段:
XML/HTML代码
-
<
ul
>
-
<
% $actions_in_mem.each do |key,value|%
>
-
<
li
>
<
%=key%
>
=
>
<
%=value%
>
</
li
>
-
<
%end%
>
-
</
ul
>
如上,就可以理解的差不多啦..
关于如何查找,等下再写一篇说说.
其他参考文档:
1.http://blog.waynedeng.com/article.asp?id=628
2.http://www.cnblogs.com/hardrock/archive/2006/09/07/497554.html
分享到:
相关推荐
然后在控制器中使用 `cache_page` 方法来缓存特定的动作响应,如 `cache_page @post`。 2. **页面缓存的局限性**:不是所有页面都适合使用页面缓存。如果页面内容根据用户身份或行为动态变化,例如登录状态、个人...
在Rails 3项目中使用RecordCache,首先需要通过Gemfile添加依赖: ```ruby gem 'record-cache' ``` 然后运行`bundle install`来安装。接着,在`config/initializers/record_cache.rb`中进行配置,例如设置缓存过期...
在Rails中,缓存机制是用来提高Web应用性能的重要技术之一,其原理是通过减少数据库操作和渲染的次数来达到加快页面响应速度的目的。缓存可以在不同的层面上进行,例如:页面缓存、动作缓存、片段缓存、低级缓存和...
这篇博客“rails中使用javascript日期控件”探讨的就是如何在Rails应用中集成JavaScript日期控件,特别是通过一个名为WebCalendar.js的库来实现这一功能。WebCalendar.js是一个轻量级的JavaScript库,用于创建交互式...
3. **应用程序缓存**:在应用层面上实现缓存机制,如使用Rails框架内置的ActiveRecord来管理对象缓存,减少数据库的查询次数。 4. **Web服务器缓存**:在Web服务器级别实现缓存功能,比如使用Nginx等反向代理服务器...
shoppe-example, 在 Rails 中使用Shoppe平台的示例存储实现 这是一个 Rails 应用程序,它使用 Shoppe 构建。 它具有一个可以爱的设计,以充分演示Shoppe平台提供的功能以及它在 Rails 应用程序中的。 正在启动要开始...
7. **哈希与符号化键(Hashes and Symbolized Keys)**:在Rails中,使用符号作为哈希键可以提高性能,因为符号是不可变的,且在内存中只存储一次。 8. **部分视图(Partials)**:部分视图是可重用的视图代码块,...
为了运行和测试应用,你需要在命令行中使用Rails服务器。在Aptana中,可以使用内置的终端工具。打开“Terminal”视图,输入`rails server`启动服务器,然后在浏览器中访问`http://localhost:3000`查看你的应用。 在...
在Rails中,我们可以使用`webpacker` gem来集成webpack。在Gemfile中添加: ```ruby gem 'webpacker', '~> 5.4' ``` 然后运行`bundle install`,接着执行`rails webpacker:install`初始化配置。 Webpacker会创建...
Ruby on Rails:Rails性能优化与缓存策略.docx
这样做的问题是,在生产中,我们经常有多个Rails实例在运行,并且每个实例都会有自己的缓存存储,这并不是对资源的充分利用。 文件存储适用于较小的应用程序,但是效率不高,因为读取和写入硬盘驱动器相对较慢。 ...
只需在视图代码中使用 `cache` 和 `expire_fragment` 方法,就可以指定要缓存的区域。 4. **页面缓存(Page Cache)** 页面缓存是最简单的缓存形式,它将整个HTML页面存储在磁盘上,由Web服务器直接返回,无需经过...
在"Winkee_TreeView"这个文件名中,"TreeView"通常是指一种数据展示方式,可能在这里指代的是Rails中如何处理和展示层次结构数据,比如分类、目录或者层级关系的数据。这可能涉及到ActiveRecord的has_many :through...
rails-assets, 在 Rails 中,资产管理的解决 Rails 资产 Bundler 到 Bower 代理本自述文件涉及项目的开发方面。 访问站点了解如何在你的应用程序中使用 Rails 资产。 插件开发设置git clone git@github.com:tenex/r
路由(Routing)在Rails中扮演着核心角色,它将HTTP请求映射到相应的控制器动作。通过配置`config/routes.rb`文件,开发者可以定义资源路由,实现RESTful API设计。 ActionController是Rails中的一个关键组件,它...
5. **Gemfile与Bundler**:Rails项目通常使用Gemfile来管理依赖库,Bundler工具则用于安装和管理这些依赖,确保在不同环境下项目的运行一致性。 6. **Scaffolding**:Rails提供了快速生成基本CRUD(Create, Read, ...
此外,书中还介绍了一些Rails中的高级概念,如Strong Parameters(强参数),它在Rails 4.0版本中引入,用于解决之前版本中的参数篡改问题,从而帮助开发者安全地处理外部提交的数据。 通过一系列的教学内容,包括...
mail_form, 在 Rails 中使用 i18n 验证附件和请求信息,直接从表单发送电子邮件 MailForm Rails 3这个 gem 构建在 ActiveModel 之上,展示如何从 Rails 中提取验证。命名和 i18n,而不需要自己实现。本自述文件指的...