gpt4 book ai didi

ruby-on-rails - 调用 API 但不是针对每个用户

转载 作者:行者123 更新时间:2023-12-04 03:59:22 25 4
gpt4 key购买 nike

我想做类似的事情:Rails way to call external API from view?

但我不想为来自用户的每个请求调用 API,因为这会给 API 服务器带来很多不必要的负载,并且会过快地耗尽我的配额。

有没有什么方法可以缓存每 100 个用户的响应并将缓存的版本显示给每个其他用户或类似的东西?可能已经有一些东西可以做到这一点,但我是 Ruby 的新手,希望得到一些帮助。

最佳答案

有多种方法可以实现您的目标。我建议不要缓存每个 xxx 用户的响应,因为在流量会比其他人更费力的日子和时间周围有很多变数。我建议您问问自己该方法的行为是什么。是提取一些复杂的数据还是只是简单的计数?如果实时信息不重要,那么缓存信息的可接受时间范围是多少?

如果上述问题的答案可以在时间metric而不是xxx用户访问时得到回答,那么你可能想使用内置的Rails.cache,通过在a中定义metric收集方法助手,然后从 View 中调用:

def method_to_call
Rails.cache.fetch("some_method", expires_in: 1.hour) do
SomeThing.to_cache
end
end

从这里您可以预测您对 API 的访问并确定您在定义的时间段内的使用情况,而无需担心您的网站在一天中的哪些时间可能会更繁忙,或者应用程序使用的任何意外高峰。

如果你想缓存每个xxx用户访问,我强烈推荐redis。这是一款非常棒的软件,具有令人难以置信的速度和可扩展性。它是一个键值对存储,可以保存有关唯一用户和页面浏览量的数据。

另一个要问的问题是,您是针对单个用户还是单个页面 View 进行缓存?根据答案,您可以存储用户 ID 或页面查看计数,并具有条件逻辑来刷新每个 xxx 指标的缓存。如果您每周左右进行一些尽职调查以清理存储,那么性能应该不是太大的问题,具体取决于存储的数据。

当您使用大规模缓存时,您可能不得不考虑托管 Redis 实例的基础架构。您需要专用服务器吗? docker 是生产 redis 的可行选择吗?您可以在应用程序的同一实例上托管 redis 实例吗?所有这些可能的开销都支持最初的方法,但这同样取决于您的需求。

关于ruby-on-rails - 调用 API 但不是针对每个用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63325948/

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