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

Jos*_*dez 7 activerecord memcached caching ruby-on-rails

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

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

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

谷歌搜索几周后,我仍然没有找到一个很好的技术来存储AR实例在memcached中,而不必处理上面列出的2个问题.

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

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

Har*_*tty 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
Run Code Online (Sandbox Code Playgroud)

序列化/反序列化 XML 会产生一些额外成本。但这使我们能够在非 Ruby 应用程序之间共享缓存。

  • 此解决方案通常会产生以下错误:“警告:无法批量分配受保护的属性:id” (2认同)