5

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

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

这是在第一次写入缓存后出现错误。在控制台中四处寻找,我看到 Group.top_groups 返回一个项目数组,如下所示:

[#<Group id: 4, name: "IBP", rank: 6, users_count: 13, leader_id: 4662>, 3887]

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

[#<Group id: 4, name: "IBP", rank: 6, users_count: 13, leader_id: 4662>, :@new_record_before_save], false, 3887]

有谁知道是什么导致@new_record_before_save 和“假”值被插入到缓存中该对象的所有条目中?

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

4

1 回答 1

4

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

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

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

于 2012-10-30T03:08:44.890 回答