1

目前,我有以下序列化程序:

class UserSerializer < ActiveModel::Serializer
  cached
  delegate :cache_key, to: :object
  has_many :profiles
end

class ProfileSerializer < ActiveModel::Serializer
  cached
  delegate :cache_key, to: :object
  has_many :pages
end

class PageSerializer < ActiveModel::Serializer
  cached
  delegate :cache_key, to: :object
  has_many :posts
end

由于各种原因,我需要在序列化我的用户模型时序列化所有关联的配置文件、页面和帖子。不幸的是,这会导致一个相当大的 JSON 哈希值难以有效缓存——我的本地 memcached 服务器只能存储大约 75 个序列化用户。有没有办法设置序列化程序,这样我就不用缓存整个用户模型 JSON 的输出,而是只缓存 JSON 的唯一部分并提交另一个缓存提取来检索相关配置文件、页面和的序列化数据帖子?

4

1 回答 1

0

我认为没有办法在ActiveModel::Serializers. 您可以以使代码复杂化为代价来减小缓存大小。像这样的东西会起作用:

user_json = UserSerializer.new(@user).as_json
user_json[:profiles] = @user.profiles.map { |profile| ProfileSerializer.new(profile).as_json }
etc.

在您的示例中,当然需要更多的嵌套。

这不是一个很好的解决方案——如果你一定要返回深度嵌套的 JSON,我认为最好的短期选择是增加一些内存缓存容量。从长远来看,可能值得重新考虑这种方法,因为一次归还所有东西可能不可持续。

于 2014-03-12T23:49:18.380 回答