如果用memcache把一些系统的基础数据表全部存起来,关联中的belongs_to,这种关联还得读取数据库。

例如 B belongs_to A   那么 a.b是取B表中的一条数据。 但是B表的数据全部都放在memcache中了。这里的数据读取就有问题了。 读cache总要比读取数据库要快的。有没有现成的方案的?
评论
dazuiba 2007-11-12   回复
谢谢robbin...
如果一开始我只想将缓存分布在一台机器上,ruby有没有memcached的替代品?
类似oscache,在一个ruby虚拟机内使用。
如果自己用ruby写个类似oscache的缓存器的话,如果使用多个mongrel实例,会不会制造多份缓存?
只是问问,:-)
robbin 2007-09-15   回复
jack 写道
两者都不是,只用了一个memcache client. Ruby-MemCache。 看来的还得自己写,主要有些查询不是通过id来查询的。


Ruby-MemCache的性能很糟糕,现在大家都改用memcache-client了。非主键的query cache自己写也没啥麻烦的,几行代码封装一下而已,如果你用cache_fu,已经有了。这是我写的query_cache代码:

module QueryCache

#  Usage: get_cache(key, timeout) { Model.find_method }
  def get_cache(key, timeout = 60 * 30)
    return value = yield if RAILS_ENV == 'test'
    unless value = Cache.get(key)
      Cache.put(key, value, timeout) if value = yield
    end
    value
  end
  
end


很简单。
jack 2007-09-15   回复
两者都不是,只用了一个memcache client. Ruby-MemCache。 看来的还得自己写,主要有些查询不是通过id来查询的。
robbin 2007-09-15   回复
如果你用的是CachedModel的话,会自动缓存关联对象,如果你用的是cache_fu,那就要自己写:
class Child
  acts_as_cached
  belongs_to :parent
  def parent
    Parent.get_cache(self.parent_id)
  end
end
发表评论

该博客是同时发布到论坛的,无法评论在论坛已被锁定的帖子

jack
搜索本博客
我的相册
最近加入圈子
存档
最新评论