我正在构建一个可以被浏览器或其他Web服务使用的REST风格的Web服务。我愿意通过缓存来减少带宽,但是我希望只有当它与上次修改的缓存不同时,才能执行该方法并发送实际数据。
从我对@Cacheable
注解的理解来看,该方法只执行一次,输出将被缓存,直到该高速缓存过期。@CachePut
每次都会执行并更新该高速缓存,但即使没有更新,它也会再次发送该高速缓存吗?
总结是:我需要客户端能够发送它的缓存的最后修改日期,只有得到一个新的数据,如果它已被修改。
Spring如何处理客户端缓存和if-modified-since头?我需要保存上次修改时间还是自动处理?
2条答案
按热度按时间9rygscc11#
不,你得自己做。
你需要用
@Cacheable
(docs)注解你的“fetch”方法,然后用@CacheEvict
(docs)注解“update”方法,以便“删除”你的缓存。所以当你下次在修改后提取数据时,它将是新鲜的。或者,您可以使用
@CacheEvict
创建另一个方法,并从“update”方法手动调用它。rdlzhqv92#
该高速缓存相关的annotations(
@Cacheable
,@CacheEvict
etc)将只处理应用程序维护的该高速缓存。任何http响应header,如last-modified etc,都必须单独管理。Spring MVC提供了一种方便的方法来处理它(docs)。计算上次修改时间的逻辑必须明显特定于应用程序。其用法的一个例子是