`

Rails + Memcached

阅读更多
這篇介紹如何將 Memcached 跟 Rails 做一個結合,先介紹一下 Memcached 這個著名的套件。Memcached 是一個分散式的 Memory Object 架構,最早是 Life Journal Team 為了加快速度而開發的套件。 他可以啟動許多 Deamon 來將所有其他 Client 的 Object 都集合起來,並且做到多機器同步化的工作。他最大的優點是在於不需要考慮資料 ACID,所以速度方面相當的快。

當然,我們可以使用 Database 去做到一模一樣的事情,但是其實 Database 在 ACID 上面已經付出太多 Overhaed。如果今天需要操作的東西,是一些像是 Cache ,Session 之類真的不見就算了的東西的話,你可以考慮使用效率比 Database 快的 Memcached。目前已經有相當多的網站使用 Memcached 的技術,可說是相當成熟。並且在 Web Server 使用考量上,Web Server 通常使用資源是高 CPU 低 Memory ,而 Memcached 是低 CPU 高 Memory 的使用方式,兩者可以結合彼此優缺點,讓 Web Server 跟 Memcached 跑在同一台機器上面來避免浪費資源使用率。

以 Ruby on Rails 來看,Memcached 可以用在
這三個用途。

我目前使用他都是在 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 是非常的簡單,只要用 Gem 安裝 Ruby 的 Memcached Client 即可。

這裡有兩個選擇,一個是出現在很多書上面的 ruby memcache ,也是比較老牌的選擇。
gem i ruby-memcache
但是現在還有更新的選擇, Robotcoop 所開發的 Ruby Memcached Client AP

# gem install memcache-client

要選擇其實是很容易的,因為兩者的 API 實做都一模一樣,應該說 memcached-client 遵照 ruby-memcached 的 API,但是 memcached-client 效能比 ruby-memcached 來得好,所以請用 memcached-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 的準備還算是相當的完整,很多地方都有相當簡單方便的實做。



延伸閱讀


分享到:
评论

相关推荐

    集群Nginx+Tomcat+Memcached

    - **高度可扩展性**:Nginx不仅支持传统的HTTP服务,还可以轻松集成到动态系统中,如Rails和PHP环境,并且可以作为IMAP/POP3/SMTP代理服务器。 - **易于配置**:Nginx的配置简单直观,支持Perl兼容正则表达式等...

    Ruby+Rails+社交+进阶教程5

    同时,通过使用缓存(如Redis或Memcached)、数据库索引和优化查询,以及Rails的后台任务(如Sidekiq或Resque)来处理异步任务,提升应用性能。 通过本教程的学习,你将不仅掌握Ruby on Rails的基本用法,还能了解...

    配置高可用的rails

    可以使用Redis、Memcached等缓存系统来实现会话信息的共享。 5. 故障转移与自动恢复:高可用配置还包括了故障转移的机制,当某个组件发生故障时,系统能够自动进行切换,将服务切换到备用资源上。比如使用Pacemaker...

    memcached的安装与配置

    为了使Rails应用能够利用Memcached进行缓存操作,需要进行以下配置: ##### 1. 配置环境文件 打开`config/environments.rb`文件,并添加以下代码: ```ruby require 'memcache' require 'memcache_util' unless ...

    Ruby Rails 3 Linda

    11. **Caching**:Rails提供了多种缓存策略,如页面缓存、动作缓存、碎片缓存和Dalli(Memcached客户端)。学习如何利用缓存提高应用性能。 12. **部署**:最后,了解如何将Rails应用部署到生产环境,如Heroku、AWS...

    Rails Best Practices

    12. **缓存**:利用Rails的缓存机制,如Action Cache、Fragment Cache和低级别的Redis或Memcached,减少数据库查询,提高响应速度。 13. **部署与持续集成(CI/CD)**:使用Heroku、Capistrano等工具进行部署,配合...

    memcached完全剖析 翻译整理

    2. **框架集成**:许多 Web 框架(如 Django、Rails)提供了内置的 Memcached 支持。 #### 结论 Memcached 作为一种高性能的分布式内存缓存系统,在提高 Web 应用程序性能方面发挥了重要作用。通过对 Memcached 的...

    jbuilder_cache_multi

    经过Rails 4.1 + Memcached + Dalli测试 安装 将此行添加到您的应用程序的Gemfile中: gem 'jbuilder_cache_multi' 然后执行: $ bundle 或将其自己安装为: $ gem install jbuilder_cache_multi 用法 为集合中...

    The art of rails

    在性能优化方面,《The Art of Rails》可能会讨论缓存策略,包括页面缓存、动作缓存、碎片缓存和低级别的Memcached或Redis集成。此外,数据库查询优化、ActiveRecord关联的使用,以及如何通过延迟加载(lazy loading...

    Rails_Recipes_with_Source_Code

    12. **缓存(Caching)**:Rails提供了页面、片段、查询和Memcached等多种缓存策略,书中可能介绍如何提高应用性能。 13. **国际化(i18n)**:Rails支持多语言应用,书中可能讲解如何配置和使用i18n系统。 14. **...

    Rails Cache

    更高级的选择如Redis或Memcached提供了分布式缓存支持,这对于多服务器环境尤其重要,因为它们可以确保所有服务器都能访问到相同的缓存数据。 为了确保缓存的有效性,Rails 提供了几种失效策略。例如,当模型实例被...

    Rails缓存架构设计

    - 使用lighttpd作为Web服务器,fastcgi (ruby)作为应用服务器,MySQL作为数据库服务器,memcached作为缓存服务器。 - 通过优化数据库查询和利用缓存,使得CPU峰值低于60%,I/O等待时间低于5%。 - 采用了基于REST的...

    cacheflow:Memcached和Redis的彩色日志记录

    当您的日志级别设置为DEBUG (开发时默认为Rails)时,将记录所有指向Memcached和Redis的命令。 特征 要使日志记录静音,请使用: Cacheflow . silence do # code end 要使命令的日志记录静音,请使用命令创建...

    Ruby-ActionPack的Action缓存在Rails40中从核心移除

    开发者现在需要更加细致地考虑缓存策略,根据实际需求选择Page Cache、Fragment Cache或者使用第三方库如Dalli(提供Memcached支持)或Redis进行更高级的缓存管理。 在使用Page Cache时,开发者需要注意清除旧的...

    rails-memcache-dalli:在Rails应用程序中使用Dalli使用Memcache实现缓存

    假设我们有一个带有流行页面的Rails应用程序,该页面加载缓慢并且我们希望提高其性能。 最有效的方法之一是使用缓存。 过去,我们讨论了各种缓存技术,但... 它打算与Memcached服务器一起使用,这意味着该缓存将在多个R

    Ruby on Rails开发的五点建议

    使用数据库缓存服务器,如Redis或Memcached,将经常访问的数据存储在内存中,减少对数据库的直接访问。理解HTTP协议的缓存机制,如ETag和Last-Modified,以减轻整个堆栈的负担。 4. **监控与测量**:持续监控服务器...

    Rails4-Start-Up:rails4为ruby 2.1.2启动

    缓存:Memcached + redis 任务队列:sidekiq 服务器和站点监控:New relic + monit + god 部署:Capistrano3 邮件发送:sendcloud 反向代理:Nginx Web容器:unicorn 搜索:sunspot 功能组件 搜索系统,使用更强大

    Ruby-RecordCache在Rails3中缓存ActiveModelRecords

    在这些情况下,可能需要考虑更全面的缓存解决方案,如Redis或Memcached。 总结,RecordCache是Rails 3中提高性能的一个强大工具,尤其适合那些频繁查询特定Active Record模型的应用程序。通过合理利用RecordCache,...

    cakephp-2.3.0.rar_ruby rails php

    在性能优化上,CakePHP 2.3.0引入了缓存策略,如使用Memcached或APC进行数据缓存,以及视图碎片(View Caching)和查询缓存,这些都有助于提升应用的响应速度。 在开发工具和调试方面,CakePHP 2.3.0提供了丰富的...

Global site tag (gtag.js) - Google Analytics