Привет я использую ColdFusion для вызова API Last.fm, с помощью пакета cfc, полученного отсюда.
Я обеспокоен осмотром через предел запроса, который является 5 запросами на возникновение IP-адреса в секунду, усредненный за 5-минутный период.
Пакет cfc имеет центральный компонент, который называет все другие компоненты, которые разделены на разделы как "художник", "отслеживают" и т.д... Этот центральный компонент "lastFmApi.cfc". инициируется в моем приложении и сохраняется для продолжительности жизни приложения
// Application.cfc example
Теперь, если я хочу назвать API через обработчик/контроллер, например, мой обработчик художников... Я могу сделать это
Я немного смущен к кэшированию, но кэширую каждый вызов к API в этом обработчике в течение 5 минут, но это имеет какое-либо значение, потому что каждый раз кто-то поражает новую привычку страницы художника, которую это все еще считает, поскольку новое ударилось о API?
Удивление, как лучше всего заняться этим
Спасибо
Поскольку это простая модель данных, я бы не стал усложнять ситуацию с помощью специальных механизмов кэширования. Я бы поместил простую структуру / запрос: 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, а затем срок действия вашего кеша.
Рисунок фасада рекомендуется, чтобы его можно было изменить в будущем.
Извините за опечатки :)
Я бы попробовал использовать собственный кеш.
Это может быть структура, в которой ключи представляют собой имена исполнителей или другие уникальные идентификаторы ваших записей.
Если вы используете CF9 или Railo 3.1.2+, вы можете использовать встроенное кеширование (функции CachePut, CacheGet и т. Д.), Оно может обрабатывать таймауты и прочее.
В противном случае вы можете сохранить кэш в области приложения, но вам нужно будет включать метку времени с каждой записью и проверять ее при событиях кеширования (получение / размещение / удаление) или даже при каждом запросе.