shitou's blog 

  • Home
  • About
  • Feed
  • 十人族
  • MIX BOY
  • 塌客

Category "ruby on rails"

15
Aug

memcached学习-4

今天把rails上memcached实验做了

 

实验说明:

1.memcache server共有3台, 平台都为Linux

2.rails应用运行在一台windows上

 

cached_model

memcached源码包的安装就不多说明了,以前的日志中有, rails的插件主要用了cached_model和cache_fu

因为感觉cached_model功能没有cache_fu完善和灵活,所以这里对cached_model就不多说,只提几点:

a)在environment.rb中添加:

require 'memcache'
require 'cached_model'

memcache_options = {
:c_threshold => 10_000,
:compression => true,
:debug => false,
:namespace => 'rails_production',
:readonly => false,
:urlencode => false
}

CACHE = MemCache.new memcache_options

CACHE.servers = ['192.168.1.12:11211'] #memcache的缓存节点地址和端口

b)在要启用memcache的模型中将模型的继承改为:

Model < CachedModel

这样基本的功能就有了,cached_model其实重写了模型的find方法,在查询缓存时会自动将数据存入缓存,当然要注意设置缓存过期等,cached_model不多说了

 

cache_fu

cache_fu是acts_as_cached的完善版,所以在模型的配置中也用的是acts_as_cached,使用:

a)安装插件后,将cache_fu/defaults/memcached.yml.default复制到config/下面,重命名为memcached.yml

b)配置文件memcached.yml,该文件分为4大部分,defaults部分为全局参数的默认配置,下面的三部分对应的就是三种运行环境的特殊设置,这里只说明一个参数就是raise_errors, 它的默认值为true, 这样会导致当一台memcache server down掉的时候页面抛出异常,很不友好,所以推荐把该值设置为false, 这样当一台server down掉时系统将正常运作,只是会重新查询数据库或者启用另一台server, 而这也正是我们需要的

c)在模型中加入

acts_as_cached

具体的参数见文件lib/cache_methods.rb文件, 或者README

d)使用时只用

Model.get_cache(id)就可以了,也可以存储复杂的原型以及关联查询:

class Child < ActiveRecord::Base 
    acts_as_cached :ttl => 15.minutes #自动失效时间
    belongs_to :parent 
    def parent 
        Parent.get_cache(self.parent_id) 
    end 
end

get_cache方法会自动去差村缓存对象,如果没有该对象的缓存数据将会重新查询并放入memcache

 

设置缓存过期钩子

def after_save
    expire_cache(id)
end

当然还要设置after_update等

 

设置belongs_to关联

class Story < ActiveRecord::Base
    acts_as_cached :include => :author
    belongs_to :author
    def after_save
        expire_cache(id)
    end
end

也可以这样:

class Story < ActiveRecord::Base
    acts_as_cached
    belongs_to :author
    def author
        Author.get_cache(author_id)
    end
    def after_save
        expire_cache(id)
    end
end

更容易理解

 

设置has_many关联

class Author < ActiveRecord::Base
    acts_as_cached
    has_many :stories
    def after_save
        expire_cache(id)
        stories.each do |story|
            story.expire_cache
        end
    end
end

注意:

1. 以上所有都必须开启缓存,即 config.action_controller.perform_caching = true;

2. 在启动时要注意先启动所有的cache server, 然后是rails应用的server, 否则会有500错误

3. 有一个gem memcache_client_stats, 是专门用来监控cache server的,好像不错,还有对应监控工具cacti的模板,很强大!

4. 又发现一个gem mem_cache_fragment_store, 专门结合memcached来实现片段缓存的, 很强大,有时间在研究.

 

ps:cache_fu从源代码可以看出好像集成了fragment cache的功能,再研究研究吧

 

<完>

Tags: memcache

2008-08-15 21:30:31, 1740 reviews, comment

send to mailbox

Your email:

Related Posts

memcached学习

memcached学习-2

memcached学习-3

Ruby遍历MemCached的key

TOP

Tags

json Impactjs Canvas fun gen_server superfly PS3 Webgame HTML5 jquery SSH tenerer MooseFS gearman-ruby Gearman MongoDB MochiChat TCP U-ka saegusa IN db command Mai Kuraki Norah Jones log iPhoneException ACG Mac Safari objective-c CouchDB LVS AJAX debian 推荐 AMQP google mail bug gettext Erlang 北京 iptables 架构 tips mysql backup function 我看 postfix 监控 SEO cache Etag memcache thread 进程 线程 无锡 yield file column mixboy xml rss gems ruby shitou shell lighttpd 安全 csrf 公司 nginx linux 模块 apache webserver 朋友 大学 生活 尼古拉斯凯奇 movie 文件同步 笑笑 歌词 auto complete plugin rails music ubuntu blog

Category

  • HTML5[3]
  • iPhone[17]
  • Erlang[11]
  • google[13]
  • 生活[45]
  • 音乐[13]
  • 电影[11]
  • linux[29]
  • web server[6]
  • mail server[3]
  • cluster[1]
  • system manage[9]
  • ruby[20]
  • ruby on rails[28]
  • 开源[4]

Episode

  • MongoDB
  • MochiChat
  • iPhoneException
  • shell
  • thread
  • memcache


Popular Posts

  • 准备开始学习Erlang了(恶狼, 二郎..)
  • Ruby遍历MemCached的key
  • 服务器监控小脚本
  • MySQL Innodb备份
  • [转载]5个有用的ruby gems

Recommended Posts

  • Tri-survive - HTML5 Game
  • Cut the rope - HTML5版
  • json_formatter
  • 在gen_server中spawn新的进程
  • Superfly - Wildflowers
  • 继续凸墙 for Mac OS
  • MongoDB Beijing 2011
  • MongoDB删除map_reduce生成的tmp collection
  • Mai Kuraki - Future Kiss
  • Erlang OOP
  • 用SSH tunnel凸墙
  • Google的语法高亮工具包
  • 大量数据的批量操作
  • 再次被和谐-_-
  • 十人族: 上线了

Friends' blogs

  • levy
  • sphance
  • andreas
  • yangkunlun
  • {:dev=>:wxianfeng}
  • bheye
  • joeydarko

Login

   注册

留言 查看留言

留言

   取消

留言 查看留言


Statistics

  • 访问次数: 316257
  • 今天访问: 52
  • 日志: 213
  • 评论: 4967
  • 音乐: 9
  • 用户: 1758


少年,不点下广告吗!

 

all by shitou

blog comments powered by Disqus

close