Rails.cache.fetch插入额外的值

And*_*ndy 5 memcached ruby-on-rails-3 dalli

我们有一个页面显示了我们应用程序的前几组。排行榜的计算成本很高,因此我们将结果缓存一个小时,如下所示:

@groupboard = Rails.cache.fetch("top_groups", :expires_in => 1.hour) do  
  Group.top_groups
end
Run Code Online (Sandbox Code Playgroud)

第一次写入缓存后,这给出了错误。在控制台中四处查看,我看到Group.top_groups返回了一系列如下所示的项目:

[#<Group id: 4, name: "IBP", rank: 6, users_count: 13, leader_id: 4662>, 3887]
Run Code Online (Sandbox Code Playgroud)

当我查看从缓存返回的结果时,它看起来如下:

[#<Group id: 4, name: "IBP", rank: 6, users_count: 13, leader_id: 4662>, :@new_record_before_save], false, 3887]
Run Code Online (Sandbox Code Playgroud)

有谁知道会导致@new_record_before_save和'false'值插入缓存中该对象的所有条目的原因是什么?

我们正在使用Dalli,Memcached 1.4.9,Rails 3.2.4,Ruby 1.9.2

ray*_*kin 4

有关联对象的 AR 对象上的 Rails 缓存存在错误。尝试以下操作:

@groupboard = Rails.cache.fetch("top_groups", :expires_in => 1.hour) do  
  Group.top_groups.map(&:reload)
end
Run Code Online (Sandbox Code Playgroud)

查看更多信息 https://github.com/mperham/dalli/issues/250