Ruby on rails 内存中的rails活动记录缓存

Ruby on rails 内存中的rails活动记录缓存,ruby-on-rails,caching,Ruby On Rails,Caching,我有一个模型,它通过两个外键关系与另一个模型建立关系。在导入大量数据的同时,我对这些表(3-4K行)进行了大量查找,并试图消除虚假的重复数据库查找。 (理想情况下,我的数据库只进行异步写入/插入) 我一直在玩按ID进行自己的缓存,最近切换到使用Rails.cache(现在使用MemoryStore。我不需要与其他实例同步,而且我在导入机器上内存丰富)。然而,我发现我得到了同一个相关记录的多个副本,我想把它处理掉 例如: irb> p = Phone.includes([:site =>

我有一个模型,它通过两个外键关系与另一个模型建立关系。在导入大量数据的同时,我对这些表(3-4K行)进行了大量查找,并试图消除虚假的重复数据库查找。 (理想情况下,我的数据库只进行异步写入/插入)

我一直在玩按ID进行自己的缓存,最近切换到使用
Rails.cache
(现在使用MemoryStore。我不需要与其他实例同步,而且我在导入机器上内存丰富)。然而,我发现我得到了同一个相关记录的多个副本,我想把它处理掉

例如:

irb> p = Phone.includes([:site => :client, :btn => :client]).first. 

irb> p.site.client.object_id => 67190640 

irb> p.btn.client.object_id => 67170780
理想情况下,我希望它们指向内存中的同一个对象。
Rails.cache
会将东西序列化进/出,这确实让事情变得更糟,但我对此感到惊讶。我是否可以通过_id()或某种方式覆盖find_,以便关联代理使用我的缓存

也许还有另一个我缺少的缓存模块


(请注意,此过程中没有涉及web前端。它都是模型和ORM)

尝试使用
IdentityCache
(请参阅)。我们目前也有类似的问题。我们使用JRuby是因为它速度快,但在我们的目标环境中,Malloc非常昂贵。。。使缓存这些记录实例变得更加必要

ActiveRecord中曾经有一个
IdentityMap
,但由于关联周围出现意外行为问题而被删除


刚刚注意到您在8月份提出了这个问题,您找到了一个好的解决方案吗?

尝试使用
IdentityCache
(请参阅)。我们目前也有类似的问题。我们使用JRuby是因为它速度快,但在我们的目标环境中,Malloc非常昂贵。。。使缓存这些记录实例变得更加必要

ActiveRecord中曾经有一个
IdentityMap
,但由于关联周围出现意外行为问题而被删除


刚刚注意到您在8月份提出了这个问题,您找到了一个好的解决方案吗?

我最终建立了自己的缓存系统。我想我看过身份缓存,但这不是我想要的,但我不记得确切的原因。我最终建立了自己的缓存系统。我想我看了身份缓存,它不是我想要的,但我不记得确切的原因。