gpt4 book ai didi

ruby-on-rails - 缓存序列化程序,无法缓存关联

转载 作者:行者123 更新时间:2023-12-03 16:08:22 24 4
gpt4 key购买 nike

我正在尝试使用 Active Model Serializer 实现一些缓存;这是我的序列化程序。

class ServiceFieldSerializer < ActiveModel::Serializer
attributes :id, :name, :description, :meta_description, :content, :practitioner_term, :avatar, :slug
has_many :services
embed :id, include: true

cached
delegate :cache_key, to: :object

def services
object.services.published
end

def avatar
object.image_url :avatar if object.image.present?
end
end

服务序列化器
class ServiceSerializer < ActiveModel::Serializer
attributes :id, :name, :description, :meta_description, :content, :practitioner_term, :avatar, :slug
has_one :service_field
embed :id

cached
delegate :cache_key, to: :object

def avatar
object.image_url :avatar if object.image.present?
end
end

输出“y ServiceSerializer.new(Service.first)”
object: !ruby/ActiveRecord:Service
attributes:
id: 4
name: ADHD Coaching
description: Bliv klogere på hvorfor du har det damp i hovede
service_field_id: 2
created_at: 2014-02-18 08:08:41.755177000 Z
updated_at: 2014-04-29 08:30:44.111671000 Z
content: tihihi
image:
published: true
meta_description:
slug: adhd-coaching
practitioner_term:

我的问题是,当我有缓存调用时,我的 json 响应看起来像这样。
service_fields: []->
0: {id:2, name:Coaching, description:Det bliver du glad for, meta_description:, content:,…}
1: {id:1, name:Massage, description:Massage er godt for krop og alt i hele verden., meta_description:null,…}
2: {id:3, name:Terapi, description:Noget med nogle møder, meta_description:null,…}

如您所见,缺少相关服务,如果我从序列化程序中删除缓存,则服务就在那里。

我究竟做错了什么?

Rails 版本:4.0.5

AMS 版本:0.8.1

最佳答案

你没有做错任何事......事实上我花了一个多星期来弄清楚为什么这不起作用,我发现AMS缓存不适用于侧载关系......
但如果您想继续找出问题所在...然后查看 this AMS fork我们使用在 AMS 缓存问题中找到的信息来解决这个特定问题......
需要注意的一件事......通过使用这个 gem,我们能够减少查询集合所花费的时间......但它几乎对加载 1 个对象没有影响......只有集合......我们能够减少一些收集时间从 75% 到 10% 我知道只减少 10% 并不是那么好......这就是我们转向 JBuilder 的原因。现在(3 天前)……老实说,我不知道缓存是如何工作的
编辑
关于 jbuilder 和缓存时间......使用带有适当部分缓存(片段缓存)的 jbuilder 我们能够在集合未缓存时获得大约 40 毫秒的响应时间,在缓存时获得大约 15 毫秒的响应时间......缓存前的响应时间大约是 130 毫秒(因为片段缓存不会使整个对象无效,而且它的关系……只有更改的部分)……所以我建议将 jbuilder 与演示层(如 Draper gem )和 jbuilder multi cache 一起使用更好的集合缓存

关于ruby-on-rails - 缓存序列化程序,无法缓存关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24159723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com