gpt4 book ai didi

api - 在 ColdFusion 中使用缓存限制对 Api 的调用

转载 作者:行者123 更新时间:2023-12-04 17:42:26 25 4
gpt4 key购买 nike

嗨,我正在使用 ColdFusion 调用 last.fm api,使用来自 here 的 cfc 包。 .

我担心超过请求限制,即每个原始 IP 地址每秒 5 个请求,平均超过 5 分钟。

cfc 包有一个中心组件,它调用所有其他组件,这些组件被分成“艺术家”、“轨道”等部分……这个中心组件“lastFmApi.cfc”。在我的应用程序中启动,并在应用程序的整个生命周期内持续存在

// Application.cfc example
<cffunction name="onApplicationStart">
<cfset var apiKey = '[your api key here]' />
<cfset var apiSecret = '[your api secret here]' />

<cfset application.lastFm = CreateObject('component', 'org.FrankFusion.lastFm.lastFmApi').init(apiKey, apiSecret) />
</cffunction>

现在,如果我想通过处理程序/ Controller 调用 api,例如我的艺术家处理程序......我可以这样做
<cffunction name="artistPage" cache="5 mins">
<cfset qAlbums = application.lastFm.user.getArtist(url.artistName) />
</cffunction>

我对缓存有点困惑,但是我在这个处理程序中缓存每个对 api 的调用 5 分钟,但这有什么不同,因为每次有人点击一个新的艺术家页面时,这仍然算作对 api 的新点击?

想知道如何最好地解决这个问题

谢谢

最佳答案

由于它是简单的数据模型,因此我不会将自定义缓存引擎复杂化。我将简单的 struct/query : searchTerm/result,timestamp 放在某处。在那里你可以这样做:

<cffunction name="artistPage" cache="5 mins">
<cfargument name="artistName" type="string" required="true"/>
<cfif structKeyExists(application.artistCache, arguments.artistName) and structfindkey(application.artistCache, arguments.artistName)>
<cfif (gettickcount() - application.artistCache[arguments.artistName].timestamp ) lte 5000 >

<cfset result = application.artistCache[arguments.artistName].result >
<cfelse>
<cfset qAlbums = application.lastFm.user.getArtist(arguments.artistName) />
<cfset tempStruct = structnew()>
<cfset structNew.result = qAlbums >
<cfset structNew.timestamp = getTickCount() >
<cfset structInsert(application.artistCache, arguments.artistName, tempstruct, true) >

<cfset result = qAlbums >

</cfif>

<cfreturn result >
</cffunction>

编辑:是的,您还应该在某个地方放置方法,该方法将删除时间戳差异为 gt 的结构键,然后是您的缓存有效期。

建议使用外观模式,以便将来可以更改。

抱歉打字错误:)

关于api - 在 ColdFusion 中使用缓存限制对 Api 的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2712244/

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