目前,我有以下序列化程序:
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的唯一部分,并提交另一个缓存提取,以检索关联的配置文件,页面和帖子?
答案 0 :(得分:0)
我认为在ActiveModel::Serializers
内没有办法做到这一点。您可以减少缓存大小,但代价是使代码复杂化。像这样的东西会起作用:
user_json = UserSerializer.new(@user).as_json
user_json[:profiles] = @user.profiles.map { |profile| ProfileSerializer.new(profile).as_json }
etc.
在您的示例中,当然需要更多嵌套。
这不是一个很好的解决方案 - 如果你必须返回深度嵌套的JSON,我认为最好的短期选择是增加一些内存缓存容量。长期来看,重新考虑这种方法可能是值得的,因为一次归还所有东西可能是不可持续的。