论坛首页 编程语言技术论坛

memcache 和belongs_to 问题

浏览 4456 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-09-15  
如果用memcache把一些系统的基础数据表全部存起来,关联中的belongs_to,这种关联还得读取数据库。

例如 B belongs_to A   那么 a.b是取B表中的一条数据。 但是B表的数据全部都放在memcache中了。这里的数据读取就有问题了。 读cache总要比读取数据库要快的。有没有现成的方案的?
   发表时间:2007-09-15  
如果你用的是CachedModel的话,会自动缓存关联对象,如果你用的是cache_fu,那就要自己写:
class Child
  acts_as_cached
  belongs_to :parent
  def parent
    Parent.get_cache(self.parent_id)
  end
end


0 请登录后投票
   发表时间:2007-09-15  
两者都不是,只用了一个memcache client. Ruby-MemCache。 看来的还得自己写,主要有些查询不是通过id来查询的。
0 请登录后投票
   发表时间: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


很简单。
0 请登录后投票
   发表时间:2007-11-12  
谢谢robbin...
如果一开始我只想将缓存分布在一台机器上,ruby有没有memcached的替代品?
类似oscache,在一个ruby虚拟机内使用。
如果自己用ruby写个类似oscache的缓存器的话,如果使用多个mongrel实例,会不会制造多份缓存?
只是问问,:-)
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics