为了账号安全,请及时绑定邮箱和手机立即绑定

如何在使用 angular7 和 springboot 构建的 Web 应用程序中使浏览器缓存无效

如何在使用 angular7 和 springboot 构建的 Web 应用程序中使浏览器缓存无效

开满天机 2022-10-20 15:18:41
我正在使用 springboot 为后端服务 rest API 和 Angular7 为前端开发一个 Web 应用程序。我的应用程序需要很长时间才能加载,因为它必须在服务器上执行大量处理,所以我决定通过存储缓存数据来提高性能,以便首先加载页面并最终在处理结束时更新数据。这可行,但我遇到了一个问题:当我在 Angular 中更新数据时,这些数据通常保存在我的数据库中,但如果我更新页面,我看不到更改,因为浏览器继续访问旧的缓存数据而不是获取新的修改。有没有办法在修改浏览器缓存中的某些数据时使其无效?弹簧靴:我的休息控制器端点类似于:  @GetMapping(value = "/users")  public Iterable<User> getAllUsers(HttpServletResponse response) {    response.setHeader("Cache-Control", "max-age=3600");    return this.userService.findAll());  }我的服务:  @Cacheable("users")  public Iterable<User> findAll() {    return this.userRepository.findAll();  }我的角度服务:  getUsers(): Observable<User[]> {    return this.http.get<User[]>(`<ip>' + '/users');  }
查看完整描述

2 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

我可以看到您正在服务器端进行缓存,您可以通过调用使用@CacheEvict您要驱逐的密钥注释的方法来驱逐缓存:


@CacheEvict(value = "users", allEntries = true)

或者您可以使用以下方式以编程方式执行此操作CacheManager:


@Autowired

CacheManager cacheManager;


public void evictSingleCacheValue(String cacheName, String cacheKey) {

    cacheManager.getCache(cacheName).evict(cacheKey);

}


查看完整回答
反对 回复 2022-10-20
?
函数式编程

TA贡献1807条经验 获得超9个赞

您可以通过轻量级请求检查服务器端基于时间或基于内容的控件是否有任何更改。

基于时间 => 您可以在标题中使用 Last=Modified

基于内容 => 你可以使用 Etag

请检查这两个链接; https://devcenter.heroku.com/articles/increasing-application-performance-with-http-cache-headers

https://www.logicbig.com/quick-info/web/last-modified-and-if-modified-since.html


查看完整回答
反对 回复 2022-10-20
  • 2 回答
  • 0 关注
  • 62 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信