gpt4 book ai didi

java - Ehcache Java Spring MVC 和分页@Cacheable

转载 作者:行者123 更新时间:2023-11-30 08:14:33 28 4
gpt4 key购买 nike

我在我的 Spring 应用程序中使用 Ehcache 2.9.0,我希望能够缓存基于分页的结果。

首先是我现在如何使用 Ehcache:

@Cacheable(value ="EmployeesByCompanyId", key="#companyId")    
public List<Employee> getEmployeesByCompanyId(String companyId) throws Exception {
return employeeRepository.getEmployeesByCompanyId(companyId);
}

@CacheEvict(value ="EmployeesByCompanyId", key="#company.id")
public Employee createNewEmployee(Employee employee, Company company)
{ ... }

现在是我想将它用于相同目的但带有分页的方式。示例(不正确,但这是想法):

@Cacheable(value ="EmployeesByCompanyId", key="#companyId#page#maxResult"})    
@Override
public List<Employee> getEmployeesByCompanyId(String companyId, int page, int maxResult) throws Exception {
return employeeRepository.getEmployeesByCompanyId(companyId, page, maxResult);
}

然后,当我有一个新员工加入列表时,它应该驱逐缓存,但我想驱逐与 companyId 相关的缓存。如果我写类似的东西,它会删除与 companyId 相关的缓存:

@CacheEvict(value ="EmployeesByCompanyId", key="#companyId")

当我向这家公司添加新员工时,如何使缓存与分页一起工作并清除与 companyId 相关的缓存?

最佳答案

这里是根据我们的意见提出的可能的解决方案。

从缓存管理器中获取原生的 EhCache 对象(因为 Spring 的 Cache 接口(interface)不支持 getKeys 方法)

@Autowired private CacheManager cacheManager;
...
EhCache cache = (EhCache) cacheManager.getCache("EmployeesByCompanyId").getNativeCache();

然后您可以迭代缓存键,获取以 companyId 开头的键并将它们从缓存中删除

for (Object key: cache.getKeys()) {
if((String)key.startsWith(companyId))
cache.remove(key);
}

参见 http://ehcache.org/apidocs/2.8.4/net/sf/ehcache/Ehcache.html

关于java - Ehcache Java Spring MVC 和分页@Cacheable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29427165/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com