gpt4 book ai didi

ruby-on-rails - 如何使用 Active Model Serializers (0.8) 缓存数组?

转载 作者:行者123 更新时间:2023-12-01 06:07:19 25 4
gpt4 key购买 nike

在单个 Active Model Serializer 上,您可以在序列化器中指定缓存键,即

使用 AMS 缓存单个对象

class OrgSerializer < ActiveModel::Serializer
cached
delegate :cache_key, to: :object
end

数组缓存

我需要提供这些对象的数组:
array_json = ActiveModel::ArraySerializer.new(Org.all.limit(50)).to_json

而不是做 50 次缓存命中来构造数组,我想做一次缓存命中并在任何数组元素过期时使其过期。

如何缓存数组(并构造键)?

因此,我想要一个由单个对象 ID 及其上次更新日期组成的数组的缓存键,如下所示:
def cache_key_for_collection collection
keys = collection.collect{|element| "#{element.id}#{element.updated_at}" }
keys.join ""
end

你怎么能用 AMS (0.8) 做到这一点?

AMS 数组序列化程序是否允许这样做,还是需要手动完成?有没有办法声明你想要缓存以及应该如何构造 key ?

如果它不这样做,那么手动构建缓存/ key 的最简洁方法是什么?

最佳答案

它的工作原理与标准序列化程序非常相似。您将创建一个如下所示的自定义 ArraySerializer:

class BaseArraySerializer < ActiveModel::ArraySerializer
cached
def cache_key
keys = object.map{|obj| "#{obj.id}-#{obj.updated_at.to_s(:number)}" }
keys.join "/"
end

结尾

需要注意的一件事是你还在做 object.map而不是 objects ,但这纯粹是 AMS 0.8.0 的实现方式。

然后要交付 json,您唯一需要做的更改是: array_json = ActiveModel::ArraySerializer.new(Org.all.limit(50)).to_json

关于ruby-on-rails - 如何使用 Active Model Serializers (0.8) 缓存数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36953164/

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