REST API对每秒和每天的调用次数都有限制。考虑到我的应用程序可能有大量的流量,我很容易就会超出限制。
当然,清理器会定期刷新缓存的提要。
这里有两个问题。
1) REST API之一是搜索API,其中搜索结果作为ATOM提要返回。API接受几个参数,包括搜索查询。我的缓存策略应该是什么,才能根据参数唯一地标识缓存的提要?也就是说,例如,如果我搜索
/search?q=Obama&page=3&per_page=25&api_version=4我得到了这些参数的提要响应。如何缓存提要,以便稍后在调用中传递的完全相同的参数返回缓存的提要,如果参数发生更改,则应该对REST API进行新的调用?
2)另一个问题是关于清扫器。我不想清理一个很少使用的缓存提要。也就是说,搜索查询Best burgers in Somalia显然比Barak Obama更不需要。我确实有多少消费者订阅了这个提要的数据。这里的策略应该是,给定这个搜索查询的订阅者数量,根据这个数字有多大来清理缓存的提要。既然缓存需要发生在Sinatra应用程序中,那么如何实现这种全面策略呢?一些代码会有所帮助。
我对这里的任何想法都持开放态度。我希望这些机制在性能上非常好。理想情况下,我希望在没有数据库的情况下,通过纯页面缓存来实现这一点。然而,我对尝试其他事情的可能性持开放态度。
发布于 2010-08-05 19:37:34
为什么要将REST服务复制为Sinatra应用程序?您可以很容易地在现有的Rails应用程序中创建一个模型来缓存Atom提要(例如,在内部将整个提要存储为一个字符串)。
一个CachedFeed模型,当它的"updated_at“足够远而需要更新时,它会被更新。你甚至可以为你的cachedFeed控制器使用静态缓存来减轻系统的压力。
将缓存放在Rails应用程序中将大大降低何时更新缓存的复杂性,甚至可以根据查询的rest api计算执行的请求数。
您可以使用模型逻辑将调用分发到最流行的提要。搜索参数可以只是模型的一个属性,这样您就可以轻松地查找和区分它们
https://stackoverflow.com/questions/3414077
复制相似问题