Java网站下载Cache API
我在我的 java 应用程序中使用 2 个模块来下载相同的网页。 因此,实际上该网站被下载了两次。 为了避免这种情况,我是否可以附加一些缓存层,以便实际只下载该网站的 1 个副本。
我希望看到 Java 端的缓存,如果不能在更高的级别(例如某些 Web 缓存代理或其他东西)实现
I am using 2 modules in my java application which downloads the same web page.
So in effect the site is downloaded twice.
In order to avoid this , is there some caching layer i can attach , so that only 1 copy of the site is actually downloaded.
I would love to see the caching at Java side , if not possible at a later level like some web caching proxy or something
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果两个“模块”位于同一个 jvm 中,因此可以访问彼此的内存,请尝试基于单例的“缓存”。我倾向于使用 HtmlSnippit 缓存来缓存多次重复的 HTML 片段,并取得了巨大成功:
现在,
getSnippit()
和putSnippit()
方法可能需要是出于某种原因,synchronized
是为了线程安全,但这完全是另一个讨论(争论?):)(示例应该开箱即用。)
If the two 'modules' are in the same jvm and thus can access eachothers memory, try a singleton based 'cache'. I tend to use a HtmlSnippit cache for caching much repeated HTML snippits with great success:
Now, the
getSnippit()
andputSnippit()
methods will probably need to besynchronized
somehow for thread safety, but that's another discussion (argument?) altogether :)(Example should run out of the box.)
这可能有点偏离主题,因为此解决方案使用 spring:
您可以使用 ehcache-spring -annotations 无需任何代码即可进行缓存。
本质上,您可以在 ehcache.xml 中定义一个缓存:
配置为在 Spring 应用程序上下文中使用缓存注释:
并注释您的代码以自动缓存:
然后这将缓存
getHtml
方法的结果基于其参数 (url
),因此当使用相同的url
第二次调用该方法时,结果将直接来自缓存。This might be slightly off-topic as this solution uses spring:
You could use the ehcache-spring-annotations to do the caching without any code.
Essentially, you'd define a cache in ehcache.xml:
Configure to use the cache annotations in your spring application context:
And annotate your code to automatically cache:
This would then cache the results of the
getHtml
method based on its parameter (url
), so on when the method is called the second time with the sameurl
, the results would come straight from the cache.