对于缓存问题,我正在缓存我需要的对象的一系列属性:
friends = [{:id => 4, :name => "Kevin"}, {:id => 12, :name => "Martin"}, …]
是否可以拥有使用此数组的用户列表,以便我可以使用Ruby方法?例如,我通常会得到一个非朋友列表:
non_friends = User.all - current_user.friends
这里,current_user.friends将被缓存的数组替换,只有缓存的属性:
friends = [
#<User id: 4, name: "Kevin", created_at: nil, updated_at: nil, email: nil>,
#<User id: 12, name: "Martin", created_at: nil, updated_at: nil, email: nil>,
…
]
有可能吗?这是缓存的好方法吗? (一个很大的ActiveRecords列表不适合1MB Memcache块。)
谢谢,
凯文
编辑这背后的想法是使用我的应用程序大量使用的2000 ActiveRecords的排序/处理列表,但由于它不适合Memcache块,我正在尝试仅将有趣的属性缓存为数组。现在,我怎么能像使用ActiveRecord数组一样使用这个数组?
答案 0 :(得分:1)
好吧,你可以只缓存用户ID,然后在你的查找器条件中排除这些ID。在您的示例中,假设您有一个包含ID和名称的friends
哈希数组:
friend_ids = friends.map{ |f| f[:id] }
if friend_ids.empty?
non_friends = User.all
else
non_friends = User.all(:conditions => ['id NOT IN (?)', current_user.friend_ids])
end