在memcached中存储ActiveRecord对象的最佳方法是什么?

时间:2010-03-06 20:12:42

标签: ruby-on-rails activerecord caching memcached

目前在memcached中存储ActiveRecord对象存在两个问题。

  1. 未定义的类/模块问题(Google search)。从我读过的内容来看,这仍然是一个没有人有真正好的解决方案的错误。 cache_fu插件可能是最好的解决方案,将其检索调用包装在试图捕获此错误的块中,解析消息并尝试加载未定义的类/模块。

  2. 臭名昭着的LH门票#1339(LH Ticket)。只有当cache_classes设置为FALSE(开发,测试)时才会发生此错误。

  3. 经过几周的谷歌搜索后,我仍然没有找到一种在memcached中存储AR实例的好方法,而无需处理上面列出的2个问题。

    我还没有尝试的想法是将实例中的属性作为字符串删除(只是AR在进行类型转换之前如何从DB接收它们),将它们存储在memcached中然后从缓存中检索,不知何故使用这些值实例化AR对象。这可能吗?如果是这样,最好的方法是什么?

    我只是在寻找其他Rails开发人员解决这个问题的方法。

1 个答案:

答案 0 :(得分:3)

在我们的项目中,我们将对象存储为XML。

cache.write(user.cache_key, user.to_xml) # write to cache
User.new(Hash.from_xml(cache.read(cache_key))) # reach from cache xml

序列化/反序列化XML需要额外的成本。但这使我们能够在非Ruby应用程序之间共享缓存。