这篇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_params
ActionController::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可以大规模网站应用发挥巨大的作用。
|