Ruby on Rails + Memcached
2006年12月21日星期四
这篇BLOG来自 thegiive blog: Rails + Memcached ,他写了一系列的Rails有关的非常有用的文章,我选取转换成简体中文转发布了,能习惯繁体中文的朋友订阅他的blog, 将会获得不少帮助。
先介绍一下 Memcached ,Memcached 是一个分布式的 Memory Object 架构,最早由 Life Journal 所采用。 他可以启动一支 Deamon 来将所有其它 Client 的 Object 都集合起来,并且做到多机器同步化的工作。
當然,我們可以使用 Database 去做到一模一樣的事情,但是其實 Database 在 ACID 上面已經付出太多 Overhaed。如果今天需要分散式操作的東西,是一些不需要考慮 ACID 的東西,像是 Cache ,Session 之類真的不見就算了的東西的話,你可以考慮使用效率比 Database 快的 Memcached。目前已經有相當多的網站使用 Memcached 的技術,可說是相當成熟。並且在 Web Server 使用考量上,Web Server 通常使用資源是高 CPU 低 Memory ,而 Memcached 是低 CPU 高 Memory 的使用方式,兩者可以結合彼此優缺點,讓 Web Server 跟 Memcached 跑在同一台機器上面來避免浪費資源使用率。
以 Ruby on Rails 来看,Memcached 可以用在
- ActionController::Caching::Fragments
- CGI::Session::MemCacheStore
- cached_model for caching ActiveRecord objects
这三个用途。
我目前使用他都是在 Session Store 这个部分,他可以将 Multi Backend Application Server 的 Session 存放放在同一处,当然可以提高Rails Scaling 的部分。而在实做上面,Memcache 没有设定档。要在 Master 启动一个 2G Memory,listen 在 1.2.3.4 ,port 11211 的 Memcache Deamon 是这样启动的
# ./memcached -d -m 2048 -l 1.2.3.4 -p 11211
Ruby 要使用 Memcached 是非常的简单,只要安装 ruby memcache 就没问题了。
gem i ruby-memcache
但是现在还有更新的,而且也很快的 Ruby Memcached Client AP
# gem install memcache-client
要在 Rails 上面使用 Memcached 来当作 Session Handler 也相当的简单,将 session store 设为 memcached 即可。你可以在 enviroment.rb 加入
require ‘memcache’
memcache_options = {
:compression => false,
:debug => false,
:namespace => “app-#{RAILS_ENV}“,
:readonly => false,
:urlencode => false
}
memcache_servers = [ ‘192.168.1.150:2222′, ‘192.168.1.150:2223′ ]
Rails::Initializer.run do |config|
….
config.action_controller.session_store = :mem_cache_store…
config.action_controller.fragment_cache_store= :mem_cache_store, memcache_servers, memcache_options…
end
…
cache_params = *([memcache_servers, memcache_options].flatten)
CACHE = MemCache.new *cache_paramsActionController::CgiRequest::DEFAULT_SESSION_OPTIONS.merge!({ ‘cache’ => CACHE })
其实 Rails 对于 Scale 的准备还算是相当的完整,很多地方都有相当简单方便的实做。
延伸阅读
- Memcached 官方网页
- Rails Wiki:Memcached
- Rails Wiki:HowtoChangeSessionStore
不只介绍 Ruby Memcached,还介绍 ActiveRecordStore 等用法 - 使用memcached进行内存缓存
iveJournal.com使用了memcached在前端进行缓存,取得了良好的效果,而像wikipedia,sourceforge等也采用了或即将采用memcached作为缓存工具。memcached可以大规模网站应用发挥巨大的作用。
标签: Technologies
发表评论
订阅 博文评论 [Atom]
<< 主页