Rails.cache.fetch插入额外的值

时间:2012-06-26 00:45:09

标签: ruby-on-rails-3 memcached dalli

我们有一个显示应用程序顶级组的页面。排行榜的计算是昂贵的,因此我们将结果缓存一小时,如下所示:

@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和'false'值插入缓存中此对象的所有条目的原因是什么?

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

1 个答案:

答案 0 :(得分:2)

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