2012-10-09 79 views
5

我有一个正在被轮询的站点,对于来自多个客户端(浏览器,其他应用程序,unix shell脚本,python脚本等)的相同资源的JSON表示,这个站点正在进行轮询。openrasta中的服务器端缓存

我想添加一些缓存,使一些资源在服务器内缓存一段可配置的时间,以避免处理请求并将资源序列化为JSON的CPU命中。我当然可以将它们自己缓存在处理程序中,但是会在每个请求中产生序列化命中,并且也不得不修改大量的处理程序。

我看过openrasta缓存模块,但认为这只用于控制浏览器缓存?
因此,任何有关如何获得openrasta缓存资源的渲染后的代表性,编解码器生成后的建议?

感谢

+0

应该补充说,能够以编程方式使缓存无效,因为几乎所有对资源的更新都通过处理程序进入 –

+0

您正在使用哪个版本的.net? – JPReddy

+0

我正在使用.net 4.0 ..为什么? –

回答

1

openrasta缓存确实有服务器端缓存的初步支持,与API,你可以映射到asp.net服务器端缓存,使用ServerCaching属性。这表示它不完整,对于这个问题也不是openrasta缓存。这是一个需要几天的工作才能达到一个良好的v1的0.2,它完全支持我想支持的所有场景,即asp.net缓存基础架构目前不支持的场景(主要是让OpenRasta中的缓存工作完全像一个http媒介,而不是一个对象,以.net为中心的存在于asp.net land中,包括客户端控制服务器高速缓存,以便客户端可以强制服务器重新执行查询)。由于我目前没有客户端项目正在进行缓存工作,因此很难证明该插件的任何进一步工作是正确的,所以我现在没有编写任何代码。我确实有4天免费提供,所以如果你希望openrasta-caching能够满足你的任何要求,那么可以适应4天的工作。

您可以使用IOperationInterceptor实现更简单的操作,并使用它来插入asp.net管道,或者更友好的使用squid实现缓存,并依靠openrasta缓存生成正确的http缓存说明。

这就是说,对于你的问题,如果成本在json中,你可能甚至不需要服务器缓存。如果您将最后一次修改或Etag映射到处理程序返回的内容,它将在适当的情况下正确生成304,并且绕过json呈现一起,只要您的客户端执行条件请求(应该)。

还有一个建议的API,允许您通过对上次修改/ etag进行第一次查询来返回304而不检索任何数据,从而进一步优化您的API。