2010-02-11 56 views

回答

1

Rose::DB::Object::Cached将对象缓存在纯旧(非共享)内存中。在mod_perl下,这意味着每个apache进程都有自己的缓存。但是,您可以在服务器启动时缓存对象。所有这些缓存的对象将随后与每个apache子进程共享。这对于您在服务器的生命周期中不会期望更改的只读对象非常有用。

要获得更灵活的缓存选项,请查看Rose::DBx::Object::Cached::CHI

至于第二个问题,Rose::DB::Object::Cached只能从load()save()的高速缓存中读取和写入。大多数关系方法使用Manager查询来获取对象,因此不会从Rose::DB::Object::Cached缓存中读取。

+0

谢谢约翰,你有什么建议经理路线? – Timmy 2010-02-11 22:14:43

+0

我建议不要缓存除只读对象以外的任何内容。根据我的经验,更高级别的缓存(例如页面组件或整个页面)或更低级别(例如,位于数据库本身之前的缓存)往往比缓存在数据库对象级别更有成果。 – 2010-02-11 23:21:02

+0

他们是99%的时间只读。也许很小的事情会改变,但他们会被阅读所控制,而且不是最新的。几乎就像有一个表“ID,颜色,描述” - ID一样,颜色总是相同的,并且描述可能会稍微改变一次,但不是必需的。我已经转而使用Rose :: DBx :: Object :: Cached :: CHI来玩,除了管理员事务的不确定性之外,它已经非常有帮助了。 – Timmy 2010-02-11 23:26:01