Spring 使用 Ehcache 启动 @Cacheble
Spring boot @Cacheble with Ehcache
我正在使用 Spring 引导和 Ehcache 来缓存应用程序中的一些数据。
该应用程序是一个休息服务,缓存一些使用率高的数据。
我们控制器中的代码如下所示:
@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);
我在其他缓存上有相同的行为,这些缓存的使用和刷新方式与上述缓存的使用方式相同。
您应该尝试使用参数化您的缓存定义:
@Cacheable(value="CategoryModels", key="{ #root.methodName, #companyId, #user.id }")
这可能是两件事。首先,spring 提供的默认密钥解析器只考虑参数名称。修复这个孩子的最干净的方法是编写你自己的同时考虑 class 和方法的密钥左轮手枪,否则可能会从恰好共享相同参数列表的完全不同的方法取回数据。
我正在使用 Spring 引导和 Ehcache 来缓存应用程序中的一些数据。 该应用程序是一个休息服务,缓存一些使用率高的数据。
我们控制器中的代码如下所示:
@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);
我在其他缓存上有相同的行为,这些缓存的使用和刷新方式与上述缓存的使用方式相同。
您应该尝试使用参数化您的缓存定义:
@Cacheable(value="CategoryModels", key="{ #root.methodName, #companyId, #user.id }")
这可能是两件事。首先,spring 提供的默认密钥解析器只考虑参数名称。修复这个孩子的最干净的方法是编写你自己的同时考虑 class 和方法的密钥左轮手枪,否则可能会从恰好共享相同参数列表的完全不同的方法取回数据。