我有一个独立的WildFly 9.0.2,我想在服务器端缓存某些请求的响应。
某些请求可供所有用户(访问者)使用,其他请求仅适用于经过身份验证的用户。
我从文档中不明白如何做到这一点。 你能指点我一个实现这个功能的教程或手册吗?
我使用独立\ configuration \ standalone.xml
中的Infispan默认配置启动了wildfly然后,我修改了响应对象以包含缓存的头信息,希望它能像JAX-RS那样检查标头并自动缓存。
init_foo
遗憾的是,它在服务器端无效(认为它适用于我的Web应用程序,它正确读取缓存的标头信息并重新使用其本地缓存)。
当我尝试在http://127.0.0.1:9990的管理面板中查看Infinispan设置时,出现异常但无法继续。
提前感谢您的帮助。
答案 0 :(得分:2)
没有独立的Java servlet服务器以您预期的方式执行响应缓存。您在响应中设置的标头将由浏览器(确实缓存)或中间代理解释,这些代理也可以缓存。缓存的专业代理是:Varnish,NGINX。这些代理也称为Edge Proxies。
制作一个库,使独立服务器能够像你想要的那样进行缓存,接缝可能,ServletFilter可以拦截正常的请求流。我不知道有任何类似的公共图书馆。
如果要在应用程序内部进行缓存,通常要使用缓存库,如EHCache,cache2k,Google Guava Cache等。
在您的具体示例中,我建议您熟悉NGINX等代理缓存服务器并将其放在应用程序前面。就是说,这就是“行业标准”。由于以下几个原因,不希望在Java服务器内部执行HTTP响应缓存:
我也建议在应用程序内部进行缓存。但是我们在Java对象级别上执行此操作。缓存大小有限,因此堆保持较小。应用程序内部的许多缓存对象用于许多不同的响应,因此对象缓存比HTTP响应缓存更精细。
只有在某些特殊情况下,我们才会在应用程序内部执行类似于HTTP响应缓存的操作。这用于压缩或重新压缩经常使用的一些图像和CSS资源。这是一些普遍有用的潜力。也许我们会开源。
希望有所帮助。