代码之家  ›  专栏  ›  技术社区  ›  JimmyD

带有Ehcache的Spring boot@Cacheble

  •  0
  • JimmyD  · 技术社区  · 6 年前

    我使用带有Ehcache的Spring boot来缓存应用程序中的一些数据。 应用程序是一个rest服务,它缓存一些使用率很高的数据。

    控制器中的代码如下:

    @Cacheable("CategoryModels")
      @GetMapping("/category/{companyId}")
      public List<CategoryViewModel> getAllCategories(@PathVariable(value = "companyId", required = true) long companyId,
        @RequestHeader("user") String user) {
    //custom code here
    }
    

    现在,在某些情况下,用户从服务器获取不同的数据集。有人能在上述情况下解释一下吗?

    如果数据库中的数据发生更改,我将刷新缓存,程序将自动将更新的数据更新到

    为了刷新缓存,我使用了一个自定义的写入方法:

    Cache categoryCache = (Cache) manager.getCache("CategoryModels").getNativeCache();
    categoryCache.removeAll();
    categoryController.getAllCategories(company.getCompanyId(), null);
    

    我在使用和刷新的其他缓存上的行为与使用上述缓存的方式相同。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Fabien MIFSUD    6 年前

    @Cacheable(value="CategoryModels", key="{ #root.methodName, #companyId, #user.id }")
    
        2
  •  0
  •   Justin ross    6 年前

    可能有几件事。首先,spring提供的默认键解析器只考虑参数的名称。解决这个问题的最简单方法是编写同时考虑类和方法的密钥旋转器,如果没有这个方法,就有可能从恰好共享同一参数列表的完全不同的方法中获取数据。