Привет Я использую ColdFusion для вызова last.fm api, используя комплект cfc, полученный из here.Ограничение скорости звонка на Api с использованием кеша в ColdFusion
Я беспокоюсь о превышении лимита запроса, который составляет 5 запросов на исходящий IP-адрес в секунду, усредненный за 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>
Теперь, если я хочу, чтобы вызвать апи через обработчик/контроллер, например, мой обработчик художника ... Я могу сделать это
<cffunction name="artistPage" cache="5 mins">
<cfset qAlbums = application.lastFm.user.getArtist(url.artistName) />
</cffunction>
Я немного смущен к кешированию, но кэширую каждый вызов api в этом обработчике в течение 5 минут, но это имеет значение, потому что каждый раз, когда кто-то попадает на новую страницу художника, это все равно считается свежим ударил по api?
Хотите знать, как лучше решить эту
Благодарности
Привет, спасибо за ваш ответ, просто пытаясь получить лучшее понимание. Интересно, где бы я разместил * yourCacheStruct *, в application.cfc? Также этот метод, по-видимому, ограничивает вызовы для каждой функции, а не приложения в целом? I.Е вы можете сделать только 5 запросов на исходящий IP-адрес в секунду, усредненный за 5-минутный период. Эти запросы могут поступать из любого места приложения, из обработчика страницы исполнителя или, возможно, из обработчика страницы трека.Таким образом, приложение должно гарантировать, что все вызовы из любого места не превышают лимита. – namtax
Я отредактировал код в этом ответе, чтобы дать более четкое представление о том, как хранить кеш в области приложения. В конечном итоге я мог бы рассмотреть возможность добавления контроллера кэша, который обрабатывает все кэширование данных с помощью нескольких вызовов функций, а не переписывает их в каждом методе, который должен использовать кеширование; но это должно дать вам представление о том, как это делается. –
Я не уверен, почему @zarko решил поместить «cache =» 5 минут »в определение функции. Он не делает ничего, кроме добавления некоторых пользовательских метаданных. –