我使用RESTFul服务作为我的前端的后端。该服务在其响应中设置expires / etag / lastmodified标头。
我正在寻找的是一个客户端(有利的java)库,它可以从服务中获取数据并将其缓存在可插入的缓存后端,如ehcache。
我还希望能够做的是在条目无效时使用后台工作线程自动填充缓存。此外,做条件GET应该是明智的。
我遇到过 http://hc.apache.org/httpcomponents-client-ga/tutorial/html/caching.html
有没有人知道其他图书馆?这不是一个相当普遍的问题吗?
答案 0 :(得分:10)
Apache HttpComponents库的4.0+版本附带HTTP 1.1缓存支持。您可以使用Spring RestTemplate restful client进行如下操作:
CacheConfig cacheConfig = new CacheConfig();
cacheConfig.setMaxCacheEntries(1000);
cacheConfig.setMaxObjectSize(8192);
HttpClient cachingClient = new CachingHttpClient(new DefaultHttpClient(), cacheConfig);
ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(cachingClient);
RestTemplate rest = new RestTemplate(requestFactory);
答案 1 :(得分:2)
Java中客户端HTTP缓存的情况并不是特别好。这是一个非平凡的问题,并未受到大多数HTTP客户端库开发人员的攻击。</ p>
我认为这种情况正在缓慢变化,但我无法提供明确的指针。一个好的开始方法是查看JAX-RS的各种实现,这些实现带有客户端API,例如Jersey(没有客户端缓存)。可能是Restlet有一个或Restfulie,请检查。
以下是我通过Google找到的内容:
http://xircles.codehaus.org/projects/httpcache4j
您也可以尝试自己动手,但是您必须小心了解缓存标头(包括Vary :)以使其正确。
答案 2 :(得分:1)
RestEasy具有client side caching机制,如果您使用此类客户端,则无法启动和运行。
RegisterBuiltin.register(ResteasyProviderFactory.getInstance());
YourService proxy = ProxyFactory.create(YourService.class, url);
LightweightBrowserCache cache = CacheFactory.makeCacheable(proxy);
首先创建一个客户端代理实例,然后将其包装在缓存中。就是这样。