搞过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 即可持续使用了,如:
- $actions_in_mem = Hash . new
2, 然后在controller或者model或者view里面都是可用的了,比如在model里面实现刷新:
- #刷新缓存
- 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中定义一个方法手工刷新这个全局变量,或者定时刷新即可,如下代码实现手工刷新.
- #刷新缓存数据
- def refresh_actions
- Action.refresh
- end
4, 最后是在view里面显示或者维护,如下代码段:
- < 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